• 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 alternatief voor VERT.ZOEKEN

Status
Niet open voor verdere reacties.

edsel_nl

Gebruiker
Lid geworden
24 okt 2006
Berichten
72
Hi allemaal,

Ik gebruik de functie VERT.ZOEKEN om gegevens op te halen uit een externe gegevens bron (een Excel document gekoppeld met een CRM systeem). Alleen levert VERT.ZOEKEN problemen op bij sorteren, voorwaardelijke opmaak en de zoekfunctie. Ik zoek daarom naar een oplossing via een macro/vba. Zou fantastisch zijn als jullie mij op weg kunnen helpen.

Ik heb een voorbeeld toegevoegd.

Wanneer op de 'Sync' knop wordt geklikt dient via vba de ingevulde waarde (ID) in kolom A van tablad 1 te worden gezocht in kolom A van tablad 2. Van de betreffende rij dienen vervolgens kolom B t/m D te worden gekopieerd naar tablad 1. Dus niet de gehele rij. Is dit mogelijk via vba? Scheelt ook weer allemaal lange formules in de formulebalk :)

Bekijk bijlage voorbeeld - Copy.xlsm
 
Waarom zou de Vert.Zoeken-functie problemen opleveren?
Enkel als je dubbel IDnummers hebt staan levert dat problemen op, maar dan niet enkel voor deze functie.
 
Hoi Cobbe,

Waarschijnlijk omdat het nu een mix is van formules en cel-waarden die handmatig zijn aangepast omdat er soms gegevens ontbreken in het externe bestand. Daarnaast gaat het om vele records (duizenden); mijn gevoel is dat de vert-zoeken-functie dan een belastende functie voor de processor is. Ook als je vervolgens een draaitabel wil maken is mijn ervaring dat je dan beter met cellen met waarden kunt werken dan met allerlei formules die weer gekoppeld zijn met externe bronnen.
 
Om te starten.
Code:
Sub Rechthoek1_Klikken()
    snPo = Sheets("Persoonlijk_overzicht").Cells(1).CurrentRegion.Value
    snCRM = Sheets("CRM").Cells(1).CurrentRegion.Value
    For i = 2 To UBound(snPo)
        For ii = 2 To UBound(snCRM)
            If snCRM(ii, 1) = snPo(i, 1) Then
                snPo(i, 2) = snCRM(ii, 2)
                snPo(i, 3) = snCRM(ii, 3)
                snPo(i, 4) = snCRM(ii, 4)
                Exit For
            End If
        Next
    Next
    Sheets("Persoonlijk_overzicht").Cells(1).Resize(UBound(snPo), 4) = snPo
End Sub
 
een mogelijke oplossing
 

Bijlagen

  • Kopie van voorbeeld - Copy.xlsm
    20,5 KB · Weergaven: 57
@Jean-Paul

Zoals ik de uitleg in het kader interpreteer gaat het om een reeks IDs die in 1 keer moeten opgezocht worden, geen individuele ingaves.
 
@Warme bakkertje je zou kunnen gelijk hebben maar zo heb ik het niet begrepen, indien het om een reeks Id's gaat in jou oplossing natuurlijk de topper nr1.
 
Dank voor jullie hulp :D en sorry als mijn vraag niet geheel duidelijk was.

@Warm bakkertje jouw oplossingsrichting heeft mij enorm geholpen alleen zit ik nog met 1 uitdaging. Voor de VERT.ZOEKEN heb ik destijds de functie TEKST toe moeten voegen om het werkend te krijgen, dus bijv. =VERT.ZOEKEN(TEKST($A1;0)...

Dit omdat de getallen in het externe gegevens bron in kolom A als tekst zijn opgeslagen. Hoe verwerk ik dat in jouw code?
 
Ik heb het tekst vs value probleem als volgt opgelost:
Code:
Columns("A:A").Select
Selection.TextToColumns Destination:=Selection, DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1), TrailingMinusNumbers:=True
 
Volgens mij is dit voldoende.

Code:
Columns("A:A").TextToColumns
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan