Dubbele nummers tellen in een lijst mbv een macro

Status
Niet open voor verdere reacties.

GiB72

Nieuwe gebruiker
Lid geworden
27 mei 2010
Berichten
3
Hallo allemaal,

Ik wil graag met VBA een macro schrijven voor Word (maar Excel zou ook mogen als dat makelijker is) waarmee ik dubbele nummers in een lijst kan tellen. Als ik bijvoorbeeld deze lijst heb:
01.2359A
01.66Q
01.66Q
01.7D
02.10T
02.10T
02.10T
02.789Y
02.88A
02.88A
03.899S
dan wil ik na het draaien van de macro horen dat hier 4 dubbele nummers in voorkomen (namelijk 01.66Q, 2x 02.10T en 02.88A maar alleen de uitkomst 4 is van belang, niet om welke nummers het gaat).

Ik had zelf bedacht dit te laten doen door de macro het eerste nummer te laten kopieren, dit dan om te zetten naar een variabele, dan het tweede nummer kopieren en dat omzetten naar een tweede variabele, dan de variabelen vergelijken en bij gelijk een teller een laten oplopen, dan de eerste variabele vervangen door de tweede en de volgende regel inlezen en dan weer vergelijken etc. etc. Ik kom er echter niet achter hoe ik de inhoud van het klembord kan omzetten naar een variabele. De site van Microsoft geeft wel een voorbeeld (zie hier) wat lijkt te zijn wat ik bedoel maar die macro krijg ik niet aan de praat (wat heel goed kan liggen aan mijn gebrekkige VBA-kennis).

Kunnen jullie mij hier mee helpen? Hetzij door mij uit te leggen hoe ik het klembord om kan zetten naar een variabele (ik kom zelf wel uit de rest van de macro (hoop ik)), hetzij door een andere manier aan te dragen... alle hulp is welkom!
 
Hallo GiB72,

In Excel 2007 zit een optie duplicaten verwijderen (Kijk in het zogenaamde "lint" onder gegevens > duplicaten)

Als je die functie gebruikt zie je naderhand hoeveel dubbele waarden er zijn verwijderd. dat is volgens mij precies het antwoord wat je wilt hebben.(Mocht je over Excel 2007 beschikken uiteraard.)

Mark.
 
Plak het klembord in een Word document

draai deze macro:
Code:
Sub dubbelop()
 sq=split(activedocument.content,vbcr)
 for j =0 to ubound(sq)
   if ubound(filter(sq,sq(j)))>0 then x=x+ubound(filter(sq,sq(j)))+1
 next
 msgbox "Er zijn " & x & " dubbels"
End sub

je kunt niet rechtstreeks met de gegevens van het klembord werken.
 
Laatst bewerkt:
@mark xl: dank je, deze opties zit ook op andere versies van Excel en ik kan er wel wat mee... mocht er geen oplossing komen binnen de macro dan zal ik zeker deze manier kunnen gebruiken.

@snb: dank je voor je hulp maar deze macro doet niet wat ik nodig heb. Sowieso lijkt er een foutje te zitten in de regel:
msgbox "Er zijn " x " dubbels"
als ik daar van maak:
msgbox x
dan draait de macro wel maar dan geeft hij de verkeerde uitkomst (in het voorbeeld van mijn eerste post geeft hij bij mij 29 als uitkomst)
 
Code:
Sub dubbelop()
 sq = Filter(Split(ActiveDocument.Content, vbCr), ".")
 For j = 0 To UBound(sq)
   If UBound(Filter(sq, sq(0))) > 0 Then x = x + 1
    sq = Filter(sq, sq(0), False)
    If UBound(sq) = -1 Then Exit For
 Next
 MsgBox "Er zijn " & x & " dubbels"
End Sub

De melding geeft aan van hoeveel verschillende getallen er meer dan 1 in de lijst staan. Als een getal er 4 keer in staat wordt dat toch als 1 'dubbeling' beschouwd. Maw. de macro geeft het aantal niet-unieke reeksen weer.

Wil je toch in dit gdeval 4 zien gebruik dan:
Code:
Sub dubbelop()
 sq = Filter(Split(ActiveDocument.Content, vbCr), ".")
 For j = 0 To UBound(sq)
   If UBound(Filter(sq, sq(0))) > 0 Then x = x +UBound(Filter(sq, sq(0))) 
    sq = Filter(sq, sq(0), False)
    If UBound(sq) = -1 Then Exit For
 Next
 MsgBox "Er zijn " & x & " dubbels"
End Sub
 
Laatst bewerkt:
snb, geweldig, die laatste doet wat ik wil! Thanks!!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan