Avatar billede firstchoice Nybegynder
28. november 2003 - 09:12 Der er 11 kommentarer og
1 løsning

macro der fjerner dubletter i en tabel

Jeg har en enkeltkolonne tabel der indeholder tekst i de enkelte celler. Jeg har sorteret tabellen således, at celler med samme indhold står efter hinanden, og eftersøger nu en funktion der automatisk kan sammenligne indholdet af cellerne og slette dubletterne.
Avatar billede rvm Nybegynder
28. november 2003 - 09:31 #1
Prøv denne:

Sub SletDubletter()

'Makro indspillet 28-11-2003 af Richardt Veje Madsen

Selection.Tables(1).Select
Selection.MoveRight Unit:=wdCell
Selection.SelectCell
   
On Error GoTo Slut
For n = 1 To 1000

    'Celle 1
    Selection.SelectCell
    svar = Selection
    Selection.MoveRight Unit:=wdCell
   
    'Celle 2
    Selection.SelectCell
    svar2 = Selection
   
    'Tjeck
    If svar = svar2 Then
        Selection.Rows.Delete
        Selection.Tables(1).Select
        Selection.MoveRight Unit:=wdCell
        Selection.SelectCell
    End If
Next
   
Exit Sub
Slut:

Exit Sub
   
End Sub
Avatar billede firstchoice Nybegynder
28. november 2003 - 10:28 #2
Det var tæt på i første skud.
Jeg har rettet følgende for at undgå at den starter forfra når der er hit.
rettelsen er følgende:
If svar = svar2 Then
        Selection.Rows.Delete
'        Selection.Tables(1).Select
        Selection.MoveLeft Unit:=wdCell
        Selection.SelectCell
    End If
Kan du lave det sådan at den stopper når tabellen er færdig og ikke efter 1000 loops??
Avatar billede rvm Nybegynder
28. november 2003 - 10:37 #3
Hvis den ikke behøver at starte forfra (ja - jeg lavede bare lige et skud fra hoften *S*), så kan du ændre starten til følgende:

Selection.Tables(1).Select
svar = Selection.Rows.Count
Selection.MoveRight Unit:=wdCell
Selection.SelectCell
   
On Error GoTo Slut
For n = 1 To svar
Avatar billede rvm Nybegynder
28. november 2003 - 10:41 #4
Grunden til de 1000 var at jeg tænkte du måske nogle gange havde mere end 2 ens rækker, så derfor ville jeg starte forfra hver gang, men det er selvfølgelig ikke en så pæn løsning *S*
Avatar billede firstchoice Nybegynder
28. november 2003 - 10:48 #5
Jeg prøver.
Jeg har lige kørt en større test og der viser sig det problem at der er forskel på om der i to ens sætninger er store bogstaver i den ene eller der er et mellemrum efter sætningen.
Jeg vil gerne at den kun sammenligner den rene tekst og ikke ser forskel på store og små bogstaver eller forskellige mellemrum.
Kan du klare den??
Avatar billede rvm Nybegynder
28. november 2003 - 10:49 #6
OK
Avatar billede rvm Nybegynder
28. november 2003 - 11:00 #7
Prøv denne:

Sub SletDubletter()

'Makro indspillet 28-11-2003 af Richardt Veje Madsen

Selection.Tables(1).Select

svar = Selection.Rows.Count

Selection.MoveRight Unit:=wdCell
Selection.SelectCell
   
On Error GoTo Slut
For n = 1 To svar

    'Celle 1
    Selection.SelectCell
    svar = Selection
    svar = Replace(svar, Chr(13), "")
    svar = Replace(svar, Chr(7), "")
    svar = UCase(svar)
   
    Selection.MoveRight Unit:=wdCell
   
    'Celle 2
    Selection.SelectCell
    svar2 = Selection
    svar2 = Replace(svar2, Chr(13), "")
    svar2 = Replace(svar2, Chr(7), "")
    svar2 = UCase(svar2)
   
    'Tjeck
    If svar = svar2 Then
        Selection.Rows.Delete
'        Selection.Tables(1).Select
        Selection.MoveLeft Unit:=wdCell
        Selection.SelectCell
    End If
Next
   
Exit Sub
Slut:

Exit Sub
   
End Sub
Avatar billede firstchoice Nybegynder
28. november 2003 - 11:17 #8
Det er tæt på nu, men prøv at se hvad den ikke finder:
internal team draft
internal team draft
internal team draft
internal team draft
internal team draft
Det vill være fint hvid den fandt dem som dubletter
Avatar billede rvm Nybegynder
28. november 2003 - 11:20 #9
Er det ikke netop det problme jeg nævner tidligere - altså at du her mere end 1 dublet?
Avatar billede rvm Nybegynder
28. november 2003 - 11:24 #10
Prøv denne:

Sub SletDubletter()

'Makro udarbejdet den 28-11-2003 af Richardt Veje Madsen

Selection.Tables(1).Select

svar = Selection.Rows.Count

Selection.MoveRight Unit:=wdCell
Selection.SelectCell
   
On Error GoTo Slut
For n = 1 To svar

    'Celle 1
    Selection.SelectCell
    svar = Selection
    svar = Replace(svar, Chr(13), "")
    svar = Replace(svar, Chr(7), "")
    svar = UCase(svar)
   
    Selection.MoveRight Unit:=wdCell
   
    'Celle 2
    Selection.SelectCell
    svar2 = Selection
    svar2 = Replace(svar2, Chr(13), "")
    svar2 = Replace(svar2, Chr(7), "")
    svar2 = UCase(svar2)
   
    'Tjeck
    If svar = svar2 Then
        Selection.Rows.Delete
        Do
            Selection.SelectCell
            svar2 = Selection
            svar2 = Replace(svar2, Chr(13), "")
            svar2 = Replace(svar2, Chr(7), "")
            svar2 = UCase(svar2)
            If svar = svar2 Then
                Selection.Rows.Delete
            End If
        Loop Until svar2 <> svar
    End If
Next
   
Exit Sub
Slut:

Exit Sub
   
End Sub
Avatar billede firstchoice Nybegynder
28. november 2003 - 11:54 #11
Så misforstod jeg dig nok. Det går fint med flere/mange dubletter. Det eksenpel jeg viste dig skulle vise at der på hver anden var et eller flere mellemrum forand sætningen og så var der ikke hit.
[blank]Internal
internal
blev ikke fanget.
Avatar billede rvm Nybegynder
28. november 2003 - 12:50 #12
OK

Så indsæt disse linier også (ved de andre raplace sætninger):

svar = Replace(svar, Chr(32), "")'fjerner mellemrum

svar2 = Replace(svar2, Chr(32), "")'fjerner mellemrum
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Tag et kursus i Word og øg effektiviteten

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester