INSTR Funksjon
VBA Instr -funksjonen sjekker om det finnes en tekststreng i en annen tekststreng. Den returnerer 0 hvis teksten ikke blir funnet. Ellers returnerer den tegnposisjonen der teksten er funnet.
Instr -funksjonen utfører nøyaktig fyrstikker. VBA Like Operator kan i stedet brukes til å utføre unøyaktige treff / mønstermatching ved hjelp av jokertegn.
Instr Eksempel
Den følgende kodebiten søker etter ordet "Look" i strengen "Look in this string". Instr -funksjonen returnerer 1 fordi teksten er funnet i den første posisjonen.
123 | Sub FindSomeText ()MsgBox InStr ("Se i denne strengen", "Se")Slutt Sub |
Dette andre eksemplet returnerer 7 fordi teksten finnes fra den sjuende posisjonen:
123 | Sub FindSomeText2 ()MsgBox InStr ("Ikke se i denne strengen", "Se")Slutt Sub |
Viktig! Instr -funksjonen er store og små bokstaver som standard. Dette betyr at "look" ikke vil matche med "Look". For å gjøre testen ufølsom for lest, les nedenfor.
Instr Syntax
Syntaksen for Instr -funksjonen er som følger:
1 | Instr ([start], streng, delstreng, [sammenligne]) |
[start] (valgfritt) - Dette valgfrie argumentet er startposisjonen for søket. Skriv inn 1 for å begynne å søke fra posisjon 1 (eller la det stå tomt). Skriv inn 5 for å begynne å søke fra posisjon 5. Viktig! INSTR -funksjonen beregner tegnposisjonen ved å telle fra 1 IKKE fra [start] -posisjonen.
streng - Tekststrengen du vil søke i.
delstreng - Tekststrengen du finner i hovedstrengen.
[sammenligne] (valgfritt) - Som standard er Instr store og små bokstaver. Ved å angi dette argumentet kan du gjøre Instr Case ufølsom:
Argument vb Verdi | Argument Heltall | Beskrivelse |
vbBinaryCompare |
0 | (Standard) Saksfølsom |
vbTextCompare |
1 | Ikke store og små bokstaver |
vbDatabaseCompare |
2 | Bare MS -tilgang. Bruker informasjon i databasen for å utføre sammenligning. |
Startposisjon
Startposisjonen Instr lar deg angi tegnposisjonen hvor du skal begynne søket. Husk imidlertid at Instr -utgangen alltid teller fra 1.
Her setter vi startposisjonen til 3 for å hoppe over den første B:
123 | Sub Instr_StartPosition ()MsgBox InStr (3, "ABC ABC", "B")Slutt Sub |
Resultatet er 6 fordi den andre B er det sjette tegnet i strengen.
Saken-ufølsom INSTR-test
Som standard behandler VBA “L” forskjellig fra “l”. Med andre ord er VBA store og små bokstaver. Dette gjelder for alle tekstfunksjoner. For å gjøre VBA uvesentlige, setter du [sammenligne] -argumentet til 1 eller vbTextCompare.
123 | Offentlig sub FindText_IgnoreCase ()MsgBox InStr (1, "Don't Look in this string", "look", vbTextCompare)Slutt Sub |
Alternativt kan du legge til Option Compare Text øverst i kodemodulen:
1 | Alternativ Sammenlign tekst |
12345 | Alternativ Sammenlign tekstOffentlig Sub FindText_IgnoreCase2 ()MsgBox InStr ("Ikke se i denne strengen", "se")Slutt Sub |
Alternativ Sammenlign tekst vil påvirke hele koden i den modulen. Jeg personlig plasserer dette øverst i en hvilken som helst modul som omhandler tekst fordi jeg aldri bryr meg om saksforskjeller.
InstrRev -funksjon
Instr -funksjonen søker fra venstre. I stedet kan du søke fra høyre ved hjelp av InstrRev -funksjonen. InstrRev -funksjonen fungerer veldig likt Instr -funksjonen.
123 | Sub FindSomeText_FromRight ()MsgBox InStrRev ("Se i denne strengen", "Se")Slutt Sub |
Akkurat som Instr -funksjonen vil dette returnere 1 fordi det bare er en forekomst av "Look" i teksten. Men hvis vi legger til et nytt "Look", ser du at det returnerer posisjonen til "Look" til høyre:
123 | Sub FindSomeText_FromRight ()MsgBox InStrRev ("Se i denne strengen Look", "Look")Slutt Sub |
Deretter vil vi gå gjennom flere Instr -eksempler.
InString -eksempler
Hvis String inneholder Substring
Her vil vi bruke en If -setning for å teste om en streng inneholder en delstreng av tekst:
123456789 | Offentlig Sub FindSomeText ()Hvis InStr ("Se i denne strengen", "se") = 0 DaMsgBox "Ingen kamp"EllersMsgBox "Minst en kamp"Slutt omSlutt Sub |
Finn tekststrenge i en celle
Du kan også finne en streng i en celle:
12345 | Sub Find_String_Cell ()If InStr (Range ("B2"). Value, "Dr.")> 0 ThenOmråde ("C2"). Verdi = "lege"Slutt omSlutt Sub |
Eller gå gjennom en rekke celler for å teste om cellene inneholder tekst:
12345678910 | Sub Search_Range_For_Text ()Dim cell As RangeFor hver celle i området ("b2: b6")Hvis InStr (cell.Value, "Dr.")> 0 Dacell.Offset (0, 1) .Value = "Doctor"Slutt omNeste celleSlutt Sub |
Finn posisjonen til et tegn i en streng
Denne koden finner posisjonen til et enkelt tegn i en streng og tildeler posisjonen til en variabel:
1234 | Sub Find_Char ()Dim n As Longn = InStr ("Se her", "L")Slutt Sub |
Søk etter streng i Word
Denne koden vil søke etter en streng etter et ord:
12345678910 | Sub Search_String_For_Word ()Dim n As Longn = InStr ("Her ser du her", "Se")Hvis n = 0 DaMsgBox "Ordet ble ikke funnet"EllersMsgBox "Ordet funnet i posisjon:" & nSlutt omSlutt Sub |
Hvis variabel inneholder streng
Denne koden vil teste om en strengvariabel inneholder en tekststreng:
12345678 | Sub Variable_Contains_String ()Dim str As Stringstr = "Se her"Hvis InStr (str, "Her")> 0 DaMsgBox "Her funnet!"Slutt omSlutt Sub |
Instr og venstre funksjon
Instr kan brukes sammen med andre tekstfunksjoner som Venstre, Høyre, Len og Midt for å trimme tekst.
Med Venstre -funksjonen kan du skrive ut teksten før en tekststreng:
1234567891011 | Sub Instr_Left ()Dim str As StringDim n As Longstr = "Se her"n = InStr (str, "Her")MsgBox Venstre (str, n - 1)Slutt Sub |
Bruke Instr i Microsoft Access VBA
Alle eksemplene ovenfor fungerer nøyaktig det samme i Access VBA som i Excel VBA.
For å lære mer, les artikkelen vår: VBA -tekstfunksjoner