Wie helpt mij met Loop functie in VBA?

Status
Niet open voor verdere reacties.

Montecarlo

Nieuwe gebruiker
Lid geworden
17 nov 2016
Berichten
2
Beste mensen van het forum,

Ik heb de volgende situatie in excel VBA;

-Ik heb een database met omschrijving (kolom 1) en categorieveld (kolom 5), waar de juiste categorie voor elke record toegevoegd moet worden
-Ik heb een lijst met zoekwoorden, met voor elk zoekwoord een corresponderende categorie (kolom 10 zoekwoorden, kolom 11 categorie, kolom 12 subcategorie
-Ik wil dat VBA begint met het 1e zoekwoord. Zoek in elk record met LEGE categorieveld naar het zoekwoord in omschrijving,
-als er een match is kopieer vanuit de lijst de corresponderende categoriewaarde en subcategoriewaarde in database
-doe dit tot het laatste record van de database
-herhaal het proces vervolgens voor de 2e zoekwoord t/m laatste zoekwoord

Ik kan succesvol zoeken en toevoegen van de juiste categorieën in de juiste records met de 1e zoekwoord, maar het lukt mij niet om het proces te herhalen voor alle andere zoekwoorden. Wie heeft de juiste oplossing(en)?

Hieronder mijn VBA code:

Code:
Sub search()

Dim o As Integer
Dim t As Integer
Dim description, keyword, pos

o = 2
t = 2



Do While Cells(t, 10) <> Empty

Do While Cells(o, 1) <> Empty

description = Cells(o, 1).Value ' String to search in. it's the 1st column in the database
Category = Cells(o, 5).Value    '5th column of the database is the field category
keyword = Cells(t, 10).Value  'the list with keywords and corresponding categories are in columns 10,11 and 12


pos = InStr(1, description, keyword, 1)

    If Category = Empty Then

        
            If pos > 0 Then
                Cells(t, 11).Copy Cells(o, 5)   'column 11 contains categories which will be added to the matching records in the database
                Cells(t, 12).Copy Cells(o, 6)   'column 12 contains subcategories which will be added to the matching records in the database
            End If
       
    End If
        

o = o + 1

Loop

t = t + 1
Loop

End Sub
 
Je vult in de eerst pass de categorie, dus het programma leest er vervolgens overheen.

Waarom voeg je per regel niet eerst alle categorieën toe voordat je naar de volgende regel gaat?
 
@wampier

Beste vampier,

Dank voor je reactie. De reden is dat ik te veel zoekwoorden heb (>120) en de lijst met zoekwoorden ook groeit. Ik wil dus niet voor elke zoekwoord een loop functie schrijven in code, maar het proces van zoeken en matchen per zoekwoord automatisch laten verlopen.

De regel code 'Do While Cells(t, 10) <> Empty werkt niet en moet er eigenlijk uit. De rest van de code zoekt wel netjes in elke record naar de 1e zoekwaarde en vult de erbij behorende categorie en subcategorie in.

Vraag blijft dus; hoe zorg ik ervoor dat na de 1e zoekwoord de andere ook dezelfde proces doorlopen?

Ik ben benieuwd naar je inzichten!
 
Laatst bewerkt:
Ik begrijp dan de situatie niet helemaal want je zegt zelf het volgende:

-herhaal het proces vervolgens voor de 2e zoekwoord t/m laatste zoekwoord

Waarom draai je het niet om? Zoek per regel eerst voor het 2de t/m laatste zoekwoord en ga dan door naar de volgende regel? Je kan het proces nog steeds automatiseren. In plaats van 10x verticaal door de lijst lopen voor 10 zoekwoorden, 1 per keer, kun je ook 10x per regel door alle zoekwoorden lopen en dan naar de volgende regel gaan. De hoeveelheid werk is niet veel anders.
 
Mij lijkt een voorbeeldbestandje wel handig.

Het lijkt erop dat je zoiets bedoelt wat om de snelheid te bevorderen beter dmv array's opgelost kan worden.

Code:
Sub VenA()
For Each cl In Columns(1).SpecialCells(2)
  If cl.Offset(, 4) = Empty Then
    For Each cl1 In Columns(10).SpecialCells(2)
      If InStr(1, cl, cl1, 1) <> 0 Then
        cl.Offset(, 4).Resize(, 2) = cl1.Offset(, 1).Resize(, 2).Value
        Exit For
      End If
    Next cl1
  End If
Next cl
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan