• 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.

Zoekopdracht in Excel m.b.v. VBA

Status
Niet open voor verdere reacties.

gverheugd

Gebruiker
Lid geworden
2 jun 2017
Berichten
6
Ik heb een excel bestand waarin ik wil weten op welke rij een titel van een artiest staat, waarbij artiesten meerdere malen kunnen voorkomen in de zoekkolom.
De routine zoekt op een alfabetisch gerangschikte naam van de artiest (die staat in kolom 1 van sheet3). Vervolgens zoek hij daar alle titels en de plaatsen van die artiest bij (plaats staat in kolom 2 en titel in kolom 4 van sheet1). h.Row geeft de (meerdere malen) gevonden regelnummers van de artiest terug .

Daarvoor gebruik ik nu deze routine:

For StepListingsPrint = 2 To EndRow
SearchValue = Sheets(3).Cells(StepListingsPrint, 1)
'MsgBox SearchValue
CountListings = Sheets(3).Cells(StepListingsPrint, 2)
If CountListings <> 1 Then
For StepListings = 1 To CountListings
Set h = Sheets(1).Range(StartSearchRow & ":" & EndSearchRow).Find(SearchValue)
'MsgBox h.Row
StartSearchRow = h.Row
Cells(StepListingsPrint, (StartRowListings + StepListings)).Value = Sheets(1).Cells(StartSearchRow, 2)
Cells(StepListingsPrint, (StartRowListings + StepListings + 1)).Value = Sheets(1).Cells(StartSearchRow, 4)
StartSearchRow = h.Row + 1
StartRowListings = StartRowListings + 1
If StepListings = CountListings Then
StartSearchRow = 2
StartRowListings = 3
End If
Next StepListings
Else
Set h = Sheets(1).Range(StartSearchRow & ":" & EndSearchRow).Find(SearchValue)
'MsgBox h.Row
Cells(StepListingsPrint, (StartRowListings + 1)).Value = Sheets(1).Cells(h.Row, 2)
Cells(StepListingsPrint, (StartRowListings + 2)).Value = Sheets(1).Cells(h.Row, 4)
End If
Next StepListingsPrint

Op zich werkt deze routine goed, maar stuit wel op het volgende probleempje:
Als er meerdere artiesten in mijn zoekkolom zitten met dezelfde beginletters, bijvoorbeeld Chic en Chicago.
Als ik de routine uitvoer en Chic staat eerder (hogere plaats) in de zoekkolom dan Chicago werkt de routine goed, maar in omgekeerde volgorde dus Chicago staat eerder in de zoekkolom dan Chic dan kiest hij voor Chic de waarde die bij Chicago hoort.

Mijn vraag is dus: hoe kan ik de routine verder laten zoeken als de tweede naam uit minder (maar wel gelijke) karakters bestaat?

George
 
George,

welkom op Helpmij.nl!

Het helpt enorm als je ook het bestand (of een deel daarvan) plaatst!
 
Bestand

Hoi Haije,

Is inmiddels wel een groot bestand geworden. Ik gebruik de top2000 om mij in het gebruik van VBA te verdiepen. wat is de maximale upload omvang want hij accepteert hem niet.
 
sla het bestand eens op als .xlsb
 
Zo zou ik het proberen:
Code:
Find(searchvalue, ,[COLOR="#FF0000"] lookat:=xlWhole[/COLOR])
 
Gebruik gewoon de autofilter zonder VBA en/of maak van de tabel een intelligente tabel.
 
Verolg vraagje

Set h = Sheets(1).Range(StartSearchRow & ":" & EndSearchRow).Find(SearchValue)

Hiermee zoek ik over de gehele rij, maar ik wil alleen in kolom D zoeken, omdat ik anders geen "schone" resultaten krijg.

B.v.d.

George
 
Gebruik svp codetags.

Code:
Set h = Sheets(1).Columns(4).SpecialCells(2).Find(SearchValue)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan