Funkcija INSTR
Funkcija VBA Instr preveri, ali je niz besedila v drugem nizu besedila. Če besedila ne najde, vrne 0. V nasprotnem primeru vrne položaj znaka, kjer je besedilo.
Funkcija Instr deluje natančno ujema. Operater VBA Like Operator lahko namesto tega izvedete netočna ujemanja / ujemanje vzorcev z uporabo nadomestnih znakov.
Primer instr
Naslednji delček kode išče v nizu »Poglej v tem nizu« besedo »Poglej«. Funkcija Instr vrne 1, ker je besedilo na prvem mestu.
123 | Sub FindSomeText ()MsgBox InStr ("Poglej v tem nizu", "Poglej")End Sub |
Ta drugi primer vrne 7, ker se besedilo začne na sedmem mestu:
123 | Sub FindSomeText2 ()MsgBox InStr ("Ne glej v tem nizu", "Poglej")End Sub |
Pomembno! Funkcija Instr je velike in male črke privzeto. To pomeni, da se »pogled« ne bo ujemal z »pogled«. Če želite, da preskusni primeri niso občutljivi, preberite spodaj.
Sintaksa Instr
Sintaksa funkcije Instr je naslednja:
1 | Instr ([začetek], niz, podniz, [primerjaj]) |
[start] (neobvezno) - Ta izbirni argument je začetni položaj iskanja. Vnesite 1, da začnete iskanje s položaja 1 (ali pustite prazno). Vnesite 5, da začnete iskanje s položaja 5. Pomembno! Funkcija INSTR izračuna položaj znakov tako, da šteje od 1 NE iz položaja [start].
vrvica - Niz besedila za iskanje.
podniz - Niz besedila v primarnem nizu.
[primerjaj] (neobvezno) - Instr privzeto razlikuje velike in male črke. Če nastavite ta argument, lahko naredite Instr Case neobčutljive:
Argument vb Vrednost | Argument Integer | Opis |
vbBinaryCompare |
0 | (Privzeto) Občutljivo na velike in male črke |
vbTextCompare |
1 | Ni občutljivo na velike in male črke |
vbDatabaseCompare |
2 | Samo MS Access. Za primerjavo uporablja podatke v zbirki podatkov. |
Instr začetni položaj
Začetni položaj Instr vam omogoča, da označite položaj znakov, kjer boste začeli iskanje. Upoštevajte pa, da bo izhod Instr vedno štel od 1.
Tukaj nastavimo začetni položaj na 3, da preskočimo prvi B:
123 | Sub Instr_StartPosition ()MsgBox InStr (3, "ABC ABC", "B")End Sub |
Rezultat je 6, ker je drugi B šesti znak v nizu.
INSTR test, ki ne razlikuje med velikimi in malimi črkami
VBA privzeto obravnava "L" drugače kot "l". Z drugimi besedami, VBA razlikuje velike in male črke. To velja za vse besedilne funkcije. Če želite, da VBA ne razlikuje med velikimi in malimi črkami, nastavite argument [primerjaj] na 1 ali vbTextCompare.
123 | Javni podnabor FindText_IgnoreCase ()MsgBox InStr (1, "Ne glej v tem nizu", "poglej", vbTextCompare)End Sub |
Druga možnost je, da na vrh kode modula dodate možnost Primerjaj besedilo:
1 | Možnost Primerjaj besedilo |
12345 | Možnost Primerjaj besediloJavni pod Find FindText_IgnoreCase2 ()MsgBox InStr ("Ne glej v tem nizu", "poglej")End Sub |
Možnost Primerjaj besedilo bo vplivala na vso kodo v tem modulu. Osebno to postavim na vrh katerega koli modula, ki obravnava besedilo, ker me nikoli ne zanimajo razlike v velikih in malih črkah.
InstrRev funkcija
Funkcija Instr išče z leve strani. Namesto tega lahko iščete z desne strani s funkcijo InstrRev. Funkcija InstrRev deluje zelo podobno kot funkcija Instr.
123 | Sub FindSomeText_FromRight ()MsgBox InStrRev ("Poglej v tem nizu", "Poglej")End Sub |
Tako kot funkcija Instr bo tudi to vrnilo 1, ker je v besedilu samo en primerek »Poglej«. Če pa dodamo še en "Pogled", boste videli, da vrne položaj najbolj desnega "Pogleda":
123 | Sub FindSomeText_FromRight ()MsgBox InStrRev ("Poglej v tem nizu Poglej", "Poglej")End Sub |
Nato bomo pregledali več primerov Instr.
Primeri InString
Če niz vsebuje podniz
Tukaj bomo uporabili stavek If za preverjanje, ali niz vsebuje podniz besedila:
123456789 | Javno pomožno iskanjeSomeText ()Če je InStr ("Poglej v tem nizu", "poglej") = 0 PotemMsgBox "Ni ujemanja"Sicer paMsgBox "Vsaj eno ujemanje"Konec ČeEnd Sub |
Poišči besedilni niz v celici
V celici lahko najdete tudi niz:
12345 | Sub Find_String_Cell ()Če je InStr (Razpon ("B2"). Vrednost, "Dr.")> 0 PotemRazpon ("C2"). Vrednost = "Zdravnik"Konec ČeEnd Sub |
Ali pa preglejte vrsto celic, da preverite, ali celice vsebujejo nekaj besedila:
12345678910 | Sub Search_Range_For_Text ()Zatemni celico kot obsegZa vsako celico v dosegu ("b2: b6")Če je InStr (cell.Value, "Dr.")> 0 Potemcell.Offset (0, 1) .Value = "Zdravnik"Konec ČeNaslednja celicaEnd Sub |
Poiščite položaj znaka v nizu
Ta koda bo našla položaj posameznega znaka v nizu in položaj dodelila spremenljivki:
1234 | Sub Find_Char ()Dim n As Longn = InStr ("Tukaj poglejte tukaj", "L")End Sub |
Iskalni niz za Word
Ta koda bo iskala besedo v nizu:
12345678910 | Sub Search_String_For_Word ()Dim n As Longn = InStr ("Tukaj poglej tukaj", "Poglej")Če je n = 0, potemMsgBox "Besede ni mogoče najti"Sicer paMsgBox "Beseda je bila najdena na mestu:" & nKonec ČeEnd Sub |
Če spremenljivka vsebuje niz
Ta koda bo preverila, ali spremenljivka niza vsebuje niz besedila:
12345678 | Pod spremenljivka_Contains_String ()Dim str kot nizstr = "Poglej tukaj"Če je InStr (str, "Tukaj")> 0 PotemMsgBox "Tukaj je najdeno!"Konec ČeEnd Sub |
Instr in leva funkcija
Instr lahko uporabite skupaj z drugimi besedilnimi funkcijami, kot so Left, Right, Len in Mid, da obrežete besedilo.
S funkcijo Levo lahko iznesete besedilo pred nizom besedila:
1234567891011 | Sub Instr_Left ()Dim str kot nizDim n As Longstr = "Poglej tukaj"n = InStr (str, "Tukaj")MsgBox Levo (str, n - 1)End Sub |
Uporaba Instr v Microsoft Access VBA
Vsi zgornji primeri delujejo popolnoma enako v Access VBA kot v Excelu VBA.
Če želite izvedeti več, preberite naš članek: Besedilne funkcije VBA