• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

VBA Vlookup

Status
Niet open voor verdere reacties.

Ijskegel

Gebruiker
Lid geworden
25 nov 2013
Berichten
19
Hallo,

ik heb een spreadsheet met daarin twee kolommen(1 voor 2018 en 1 voor 2019), beiden kolomen bevatten ongeveer 400.000records,
in beide kolommen staan email adressen, nu wil ik 2019 checken welke email adressen reeds eerder zijn gebruikt in 2018, met een gewone vlookup loopt excel vast, en ik verwacht dat het met een vba wel moet lukken.
maar hoe schrijf ik zo'n vba scriptje?

alvast bedankt voor jullie reacties
groet
Harold
 
Waarschijnlijk gewoon met AANTAL.ALS
Maar een voorbeeld documentje zal het duidelijker maken.
 
Ja, en je kan ook beide kolommen selecteren en een voorwaardelijke opmaak erop los laten die controleert op dubbele waarden. Die pakt dan zowel dubbelingen uit de individuele kolommen als de dubbelingen onderling.
 
Hallo,

ik heb een spreadsheet met daarin twee kolommen(1 voor 2018 en 1 voor 2019), beiden kolomen bevatten ongeveer 400.000records,
in beide kolommen staan email adressen, nu wil ik 2019 checken welke email adressen reeds eerder zijn gebruikt in 2018, met een gewone vlookup loopt excel vast, en ik verwacht dat het met een vba wel moet lukken.
maar hoe schrijf ik zo'n vba scriptje?

alvast bedankt voor jullie reacties
groet
Harold
 
Hoi EdMoor

in kolom A staan email adressen in kolom B het jaartal 2019
In kolom E staan email adressen in kolom F het jaartal 2018

nu wil ik in kolom D laten zien of het email adres uit kolom A ook voorkomt in kolom E.
 
Dat had ik al begrepen maar ik vroeg dus om een voorbeeld documentje.
 
Code:
=IF(COUNTIF($A$1:$A$34;E1);"Ja";"Nee")

Probeer eens. Wel even je bereik aanpassen
 
Laatst bewerkt:
Dus de aangedragen suggesties heb je maar gewoon genegeerd?
 
Ik kan bijna niet geloven dat de voorgestelde formule te veel gevraagd is voor Excel.
 
Ik kan bijna niet geloven dat de voorgestelde formule te veel gevraagd is voor Excel.

Hallo allemaal, dank voor jullie suggesties, de optie als.aantal heeft uiteindelijk wel gewerkt, maar heeft dik 6 uur staan stampen, dat is mss ook wel logisch wanneer je bedenkt dat ik 364680 regels langs 465000 regels ging vergelijken.
Het was niet mijn bedoeling om onbeschoft te doen.
 
Plaats een voorbeeldbestandje met wat data en de verwachte uitkomst. 6 uur lijkt mij wel erg lang.

In minder dan 20 seconden met in beide kolommen 500k gegevens.

Code:
Sub VenA()
  t = Timer
  ar = Cells(1).CurrentRegion.Resize(, 3)
  Set d = CreateObject("Scripting.Dictionary")
  For j = 2 To UBound(ar)
    d(ar(j, 1)) = ""
  Next j
  For j = 2 To UBound(ar)
    If d.Exists(ar(j, 2)) Then ar(j, 3) = "gevonden"
  Next j
  Cells(1).CurrentRegion.Resize(, 3) = ar
  MsgBox Timer - t
End Sub
 
Laatst bewerkt:
Voorbeeld bestandje

Beste VenA,

Hartelijk dank voor je support
Ik ga zeker je VBA script proberen

bijgaand bestandje met fictieve namen.
Mvrgr
Harold
 

Bijlagen

Het is logischer om de code eerst te proberen. Wel even wat aanpassen maar dat lijkt mij niet zo moeilijk.
 
Het is logischer om de code eerst te proberen. Wel even wat aanpassen maar dat lijkt mij niet zo moeilijk.

Dat is nog niet zo eenvoudig voor een leek zoals ik.
ik weet niet precies wat hier gebeurd, kan je misschien een toelichting geven per regel?

Als ik het scriptje nu run (zoals je hebt doorgegeven) dan loopt het vast op "Cells(1).CurrentRegion.Resize(, 3) = ar"
 
Haal het = teken weg uit A38 of zet de eigenschappen van kolom A op tekst.

Code:
Sub VenA()
  ar = Cells(1).CurrentRegion 'zet de gegevens in een array
    Set d = CreateObject("Scripting.Dictionary") 'maak een dictionary aan
    For j = [COLOR="#FF0000"]3[/COLOR] To UBound(ar) 'doorloop de array vanaf rij 3 t/m de laatste rij
      d(ar(j, 1)) = "" 'zet de emailadressen uit kolom A in de dictionary als unieke sleutel
    Next j 'volgende rij
    For j = 2 To UBound(ar) 'doorloop nogmaals de array
      If d.Exists(ar(j, [COLOR="#FF0000"]4[/COLOR])) Then ar(j, 3) = "ja" Else ar(j, 3) = "nee" 'kijk of het emailadres uit kolom D voorkomt in de dictionaray en schrijf het resultaat in ar(j,3) (kolomm C)
    Next j 'volgende
    Cells(1).CurrentRegion = ar 'Schrijf de resultaten terug.
End Sub
 
Laatst bewerkt:
Ik begin het een beetje te snappen, ik heb je code handmatig overgenomen (geen Copy /Paste)
maar nu loop ik tegen twee fouten,
Als eerste de melding, Compile error "End With" without With" deze "End With" heb ik even uitgezet.
Dan krijg ik de volgende fout melding, Run time error 9 "Subscript out of range" wanneer ik dan op Debug klik word het stukje code If d.Exists(ar(j, 4)) Then geel gemarkeerd.

volgens mij doe ik niets vreemds.
 
Waarom heb je het handmatig overgenomen? De End With moet inderdaad weg (had ik weggehaald in #17). Waarschijnlijk moet het vergelijk ook net andersom als ik jouw bestandje bekijk. Waarom heb je het bestand niet geplaatst met hoe je het hebt toegepast?
 
Ik had het bestandje al geplaatst voordat ik met jou code aan de slag ging.
Nu ik je code wel gekopieerd heb overgenomen werkt alles perfect.

Hartelijk dank
Ik ben hier echt heel veel wijzer van geworden.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan