INSTR-functie
De VBA Instr-functie controleert of een tekstreeks wordt gevonden in een andere tekstreeks. Het retourneert 0 als de tekst niet wordt gevonden. Anders wordt de tekenpositie geretourneerd waar de tekst wordt gevonden.
De Instr-functie voert uit: exact wedstrijden. De VBA Like-operator kan in plaats daarvan worden gebruikt om onnauwkeurige overeenkomsten / patroonovereenkomsten uit te voeren met behulp van jokertekens.
Instr Voorbeeld
Het volgende codefragment zoekt in de tekenreeks "Kijk in deze tekenreeks" naar het woord "Kijk". De Instr-functie retourneert 1 omdat de tekst op de eerste positie staat.
123 | Sub FindSomeText()MsgBox InStr("Kijk in deze string", "Kijk")Einde sub |
Dit tweede voorbeeld retourneert 7 omdat de tekst wordt gevonden vanaf de 7e positie:
123 | Sub FindSomeText2()MsgBox InStr("Kijk niet in deze string", "Kijk")Einde sub |
Belangrijk! De Instr-functie is: hoofdlettergevoelig standaard. Dit betekent dat "look" niet overeenkomt met "look". Lees hieronder om de test hoofdletterongevoelig te maken.
Instr-syntaxis
De syntaxis voor de Instr-functie is als volgt:
1 | Instr( [start], string, substring, [vergelijk] ) |
[start] (optioneel) - Dit optionele argument is de startpositie van de zoekopdracht. Voer 1 in om te beginnen met zoeken vanaf positie 1 (of laat leeg). Voer 5 in om te beginnen met zoeken vanaf positie 5. Belangrijk! De INSTR-functie berekent de tekenpositie door te tellen vanaf 1 NIET vanuit de [start] positie.
snaar - De reeks tekst waarin moet worden gezocht.
subtekenreeks - De tekenreeks die in de primaire tekenreeks moet worden gevonden.
[vergelijk] (optioneel) - Standaard is Instr hoofdlettergevoelig. Door dit argument in te stellen, kunt u Instr Case ongevoelig maken:
Argument vb Waarde | Argument Geheel getal | Beschrijving |
vbBinairVergelijken |
0 | (Standaard) Hoofdlettergevoelig |
vbTekstVergelijken |
1 | Niet hoofdlettergevoelig |
vbDatabaseVergelijken |
2 | Alleen MS-Access. Gebruikt informatie in de database om vergelijkingen uit te voeren. |
Instr startpositie
Met de Instr-startpositie kunt u de tekenpositie aangeven waar u uw zoekopdracht begint. Houd er echter rekening mee dat de Instr-uitvoer altijd vanaf 1 telt.
Hier zetten we de startpositie op 3 om de eerste B over te slaan:
123 | Sub Instr_StartPosition()MsgBox InStr(3, "ABC ABC", "B")Einde sub |
Het resultaat is 6 omdat de tweede B het zesde teken in de tekenreeks is.
Hoofdletterongevoelige INSTR-test
Standaard behandelt VBA "L" anders dan "l". Met andere woorden, VBA is hoofdlettergevoelig. Dit geldt voor alle tekstfuncties. Om VBA hoofdletterongevoelig te maken, stelt u het argument [vergelijk] in op 1 of vbTextCompare.
123 | Openbare sub FindText_IgnoreCase()MsgBox InStr(1, "Kijk niet in deze string", "look", vbTextCompare)Einde sub |
Als alternatief kunt u de optie Tekst vergelijken bovenaan uw codemodule toevoegen:
1 | Optie Tekst vergelijken |
12345 | Optie Tekst vergelijkenOpenbare sub FindText_IgnoreCase2()MsgBox InStr("Kijk niet in deze string", "kijk")Einde sub |
De optie Tekst vergelijken heeft invloed op alle code in die module. Ik plaats dit persoonlijk bovenaan elke module die met tekst te maken heeft, omdat ik me nooit zorgen maak over verschillen in hoofdletters.
InstrRev-functie
De Instr-functie zoekt vanaf de linkerkant. In plaats daarvan kunt u vanaf de rechterkant zoeken met behulp van de InstrRev-functie. De InstrRev-functie werkt op dezelfde manier als de Instr-functie.
123 | Sub FindSomeText_FromRight()MsgBox InStrRev("Kijk in deze string", "Kijk")Einde sub |
Net als de Instr-functie zal dit 1 retourneren omdat er slechts één instantie van "Look" in de tekst is. Maar als we een tweede "Kijk" toevoegen, zul je zien dat het de positie van de meest rechtse "Kijk" retourneert:
123 | Sub FindSomeText_FromRight()MsgBox InStrRev("Kijk in deze tekenreeks Kijk", "Kijk")Einde sub |
Vervolgens zullen we meer Instr-voorbeelden bekijken.
InString-voorbeelden
Als tekenreeks een subtekenreeks bevat
Hier zullen we een If-statement gebruiken om te testen of een string een substring van tekst bevat:
123456789 | Openbare Sub FindSomeText()If InStr("Kijk in deze tekenreeks", "kijk") = 0 DanMsgBox "Geen overeenkomst"AndersMsgBox "Minstens één overeenkomst"Stop alsEinde sub |
Tekstreeks in een cel zoeken
Je kunt ook een string in een cel vinden:
12345 | Sub Find_String_Cell()Als InStr(Bereik("B2").Waarde, "Dr.") > 0 DanBereik ("C2"). Waarde = "Dokter"Stop alsEinde sub |
Of loop door een reeks cellen om te testen of de cellen tekst bevatten:
12345678910 | Sub Search_Range_For_Text()Dim cel als bereikVoor elke cel binnen bereik ("b2:b6")Als InStr(cel.Waarde, "Dr.") > 0 Dancel.Offset(0, 1).Waarde = "Dokter"Stop alsVolgende celEinde sub |
Vind de positie van een teken in een string
Deze code vindt de positie van een enkel teken in een string en wijst de positie toe aan een variabele:
1234 | Sub Find_Char()Dim n As Longn = InStr("Hier Kijk Hier", "L")Einde sub |
Zoekreeks voor woord
Deze code zoekt in een string naar een woord:
12345678910 | Sub Search_String_For_Word()Dim n As Longn = InStr("Hier Kijk Hier", "Kijk")Als n = 0 DanMsgBox "Woord niet gevonden"AndersMsgBox "Woord gevonden in positie: " & nStop alsEinde sub |
Als variabele een tekenreeks bevat
Deze code test of een stringvariabele een string met tekst bevat:
12345678 | Subvariabele_Contains_String()Dim str As Stringstr = "Kijk hier"Als InStr(str, "Hier") > 0 DanMsgBox "Hier gevonden!"Stop alsEinde sub |
Instr en de linkerfunctie
Instr kan samen met andere tekstfuncties zoals Links, Rechts, Len en Midden worden gebruikt om tekst bij te snijden.
Met de functie Links kunt u de tekst uitvoeren vóór een tekstreeks:
1234567891011 | Sub Instr_Left()Dim str As StringDim n As Longstr = "Kijk hier"n = InStr(str, "Hier")MsgBox Links(str, n - 1)Einde sub |
Instr gebruiken in Microsoft Access VBA
Alle bovenstaande voorbeelden werken in Access VBA precies hetzelfde als in Excel VBA.
Lees ons artikel voor meer informatie: VBA-tekstfuncties