Zoek tekst in een string (INSTR-functie) - VBA-codevoorbeelden

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

U zal helpen de ontwikkeling van de site, het delen van de pagina met je vrienden

wave wave wave wave wave