Zoeken naar cijfer zoals 7 en niet 17 in excel via VBA

Status
Niet open voor verdere reacties.

gast0667

Gebruiker
Lid geworden
20 dec 2007
Berichten
136
Wie kan mij helpen.
Ben al een tijdje aan het worstelen met onderstaande:

In een werkblad dient VBA te zoeken naar een door de gebruiker aangegeven cijfer. Zoals "7". Dit cijfer zoekt VBA in een aangegeven bereik zoals "[A1:A500]". Echter in dit bereik kan ook "7A", "7B", etc. voorkomen. Deze moet hij ook zoeken en uiteindelijk de laatste versie, zoals bijvoorbeeld "7D" aangeven en vinden. Zie onderstaande code:

Code:
Worksheets(1).Activate
With Worksheets(1).Range("A1:A500")
    Set a = .Find(SubNr, LookIn:=xlValues, LookAt:=xlPart, searchdirection:=xlPrevious)
        
    If Not a Is Nothing Then
            firstaddress = a.Address
        Do
            Regel = a.Row
            
            If Worksheets(1).Cells(Regel, "E") = "" Then
                Worksheets(1).Cells(Regel, "E").Select
                EndLoop = True
                Exit Do
            Else
                Set a = .FindNext(a)
                Regel = a.Row
            End If
    
        Loop Until EndLoop = True Or a.Address = firstaddress
    End If

d.m.v. 'searchdirection:=xlPrevious' en 'lookat:=xlPart' vindt VBA helaas eerst "17" of "27" en niet "7D". Kan VBA ook zoeken naar cijfer "7 en verder" zonder ook te zoeken naar "begin en 7" ??????

Alvast bedankt.
 
Laatst bewerkt door een moderator:
en als je laat zoeken naar " 7". (spatie en 7)
17, 27, e.d. worden dan overgeslagen.
Een 7 aan het begin van een cel of regel echter ook.
En tot welke gevallen moet gezocht worden?
Komt bijv. 72A of 172 ook voor?

Een bestandje waarin gezocht moet worden met wat je tot nu toe hebt maakt het wat gemakkelijker om een oplossing te vinden.
 
Hierbij een voorbeeld map met uitleg in de VBA-code en een kladblok-bestandje.

Alvast bedankt voor de hulp.
 

Bijlagen

  • Voorbeeld1.zip
    14 KB · Weergaven: 53
Code:
Set a = .Find(SubNr & "*", LookIn:=xlValues, LookAt:=xlWhole, searchdirection:=xlPrevious)

Wigi
 
HELP

Hij werk niet bij cijfers 1 en 2 bijvoorbeeld. Zoekt nog steeds naar 17 of 27 etc.

dit is de code

Code:
Worksheets(1).Activate
With Worksheets(1).Range("KSubnr")
    Set ZoekSubNr = .Find(SubNr & "*", LookIn:=xlValues, LookAt:=xlWhole, searchdirection:=xlPrevious)
    If Not ZoekSubNr Is Nothing Then
        ZoekAdres1 = ZoekSubNr.Address
        Do
            ZoekRij = ZoekSubNr.Row
            If Worksheets(1).Range("KOmschrijving").Cells(ZoekRij) = "" Then
                EindeLoop = True
                Exit Do
            Else
                Set ZoekSubNr = .FindNext(ZoekSubNr)
                    ZoekRij = ZoekSubNr.Row
            End If
        Loop Until EindeLoop = True Or ZoekSubNr.Address = ZoekAdres1
    Else
        MsgBox "Subnummer komt niet voor in het overzicht.", , "Onbekend subnummer."
        MsgBox "Bon wordt niet verwerkt.", , "Afgebroken !"
        Exit Sub
    End If
    BonRij = ZoekRij
End With

wat doe ik fout ????
 
Laatst bewerkt door een moderator:
Wat zit er in de variabele SubNr?

Normaal cijfers 0 t/m 99
Echter dit kan ook 3A, 3B, 4A, etc zijn (t/m Z).

Wil eigenlijk dat VBA kan zoeken naar een sub, zoals 3 en vervolgens de laatste sub kan aangeven van 3, bijvoorbeeld 3D etc.
Dacht eerst dat de code werkte, echter helaas hij vindt alsnog nummer 33 terwijl ik 3 vraag.
 
Hier een beetje hulp in het denken.

Blijkbaar is het bereik geen nummeriek maar een tekst, gegeven dat er ook bv. 7A in voor kan komen.
Dit betekent dat we ook in tekst moeten denken.
Eerst moeten we het zoekgetal omzetten naar een string (en zijn lengte moeten bepalen)
Vervolgens moeten we kijken of de eerste karakters overeenkomen met elkaar.
Vervolgens mag het volgende karakter in het bereik niet nummeriek zijn (anders vindt hij dat bij 77 hoort bij 7).
En nu moet hij nog bepalen welke hij gaat bewaren, bijv. 7 of 7B.

Voor al deze functies en keuzes zijn functie's aanwezig in VBA.
Succes met dit opzetje.

Jan
 
Heren,
Het is gelukt.

Echter op een andere manier als beschreven, namelijk:

Bijvoorbeeld voor sub 2:
Ik laat VBA zijn eigen zoekbereik instellen door eerst te zoeken naar de eerste regel met '2' erin en vervolgens te zoeken naar de eerste regel met '3' erin. En in dat bereik de laatste '2' te zoeken en te selecteren.

Allen bedankt voor het meedenken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan