INSTR -funktion
VBA Instr -funktionen kontrollerar om en textsträng finns i en annan textsträng. Den returnerar 0 om texten inte hittas. Annars returnerar den teckenpositionen där texten finns.
Instr -funktionen utförs exakt tändstickor. VBA Like Operator kan istället användas för att utföra inexakta matchningar / mönstermatchning med hjälp av jokertecken.
Instr Exempel
Följande kodavsnitt söker efter ordet "Look" i strängen "Sök i den här strängen". Instr -funktionen returnerar 1 eftersom texten finns i den första positionen.
123 | Sub FindSomeText ()MsgBox InStr ("Titta i den här strängen", "Titta")Avsluta Sub |
Det andra exemplet returnerar 7 eftersom texten hittas från och med den sjunde positionen:
123 | Sub FindSomeText2 ()MsgBox InStr ("Titta inte i den här strängen", "Titta")Avsluta Sub |
Viktig! Instr -funktionen är skiftlägeskänsliga som standard. Det betyder att "look" inte kommer att matcha med "Look". För att göra testet okänsligt läs nedan.
Instr Syntax
Syntaxen för Instr -funktionen är följande:
1 | Instr ([start], sträng, delsträng, [jämför]) |
[start] (valfritt) - Detta valfria argument är sökningens utgångsläge. Ange 1 för att börja söka från position 1 (eller lämna tomt). Ange 5 för att börja söka från position 5. Viktig! INSTR -funktionen beräknar teckenpositionen genom att räkna från 1 INTE från [start] -läget.
sträng - Textsträngen att söka i.
delsträng - Textsträngen som du hittar i den primära strängen.
[jämför] (valfritt) - Som standard är Instr skiftlägeskänslig. Genom att ställa in detta argument kan du göra Instr Case okänslig:
Argument vb Värde | Argument heltal | Beskrivning |
vbBinaryCompare |
0 | (Standard) skiftlägeskänslig |
vbTextCompare |
1 | Inte skiftlägeskänslig |
vbDatabaseCompare |
2 | Endast MS -åtkomst. Använder information i databasen för att utföra jämförelse. |
Instr Startposition
Startpositionen Instr låter dig ange teckenpositionen där du ska börja din sökning. Tänk dock på att Instr -utgången alltid räknas från 1.
Här ställer vi startpositionen till 3 för att hoppa över den första B:
123 | Sub Instr_StartPosition ()MsgBox InStr (3, "ABC ABC", "B")Avsluta Sub |
Resultatet är 6 eftersom det andra B är det sjätte tecknet i strängen.
INSTR-test som inte är skiftlägeskänsligt
Som standard behandlar VBA "L" som skiljer sig från "l". Med andra ord är VBA skiftlägeskänsligt. Detta gäller alla textfunktioner. För att göra VBA skiftlägeskänslig, ställ in [jämför] -argumentet till 1 eller vbTextCompare.
123 | Public Sub FindText_IgnoreCase ()MsgBox InStr (1, "Don't Look in this string", "look", vbTextCompare)Avsluta Sub |
Alternativt kan du lägga till Option Compare Text högst upp i kodmodulen:
1 | Alternativ Jämför text |
12345 | Alternativ Jämför textPublic Sub FindText_IgnoreCase2 ()MsgBox InStr ("Titta inte i den här strängen", "titta")Avsluta Sub |
Alternativ Jämför text påverkar hela koden i den modulen. Jag placerar detta personligen högst upp på en modul som handlar om text eftersom jag aldrig bryr mig om skillnader mellan fall.
InstrRev -funktion
Instr -funktionen söker från vänster. Istället kan du söka från höger med InstrRev -funktionen. InstrRev -funktionen fungerar mycket på samma sätt som Instr -funktionen.
123 | Sub FindSomeText_FromRight ()MsgBox InStrRev ("Titta i den här strängen", "Titta")Avsluta Sub |
Precis som Instr -funktionen kommer detta att returnera 1 eftersom det bara finns en instans av "Look" i texten. Men om vi lägger till en andra "Look" ser du att den returnerar positionen för "Look" till höger:
123 | Sub FindSomeText_FromRight ()MsgBox InStrRev ("Look in this string Look", "Look")Avsluta Sub |
Därefter kommer vi att granska fler Instr -exempel.
InString -exempel
Om sträng innehåller understräng
Här använder vi en If -sats för att testa om en sträng innehåller en delsträng med text:
123456789 | Public Sub FindSomeText ()Om InStr ("Look in this string", "look") = 0 DåMsgBox "Ingen matchning"AnnanMsgBox "Minst en match"Avsluta omAvsluta Sub |
Hitta textsträng i en cell
Du kan också hitta en sträng i en cell:
12345 | Sub Find_String_Cell ()Om InStr (intervall ("B2"). Värde, "Dr.")> 0 SedanOmråde ("C2"). Värde = "Doktor"Avsluta omAvsluta Sub |
Eller gå igenom ett cellintervall för att testa om cellerna innehåller text:
12345678910 | Sub Search_Range_For_Text ()Dim cell As RangeFör varje cell i intervallet ("b2: b6")Om InStr (cell.Value, "Dr.")> 0 Dåcell.Offset (0, 1) .Value = "Doctor"Avsluta omNästa cellAvsluta Sub |
Hitta position för ett tecken i en sträng
Denna kod hittar positionen för ett enda tecken i en sträng och tilldelar positionen till en variabel:
1234 | Sub Find_Char ()Dim n As Longn = InStr ("Här ser du här", "L")Avsluta Sub |
Sök sträng efter Word
Den här koden söker efter ett ord i en sträng:
12345678910 | Sub Search_String_For_Word ()Dim n As Longn = InStr ("Här ser du här", "Titta")Om n = 0 DåMsgBox "Ordet hittades inte"AnnanMsgBox "Ord i position:" & nAvsluta omAvsluta Sub |
Om variabel innehåller sträng
Denna kod testar om en strängvariabel innehåller en textsträng:
12345678 | Sub Variable_Contains_String ()Dim str As Stringstr = "Titta här"Om InStr (str, "Här")> 0 DåMsgBox "Här hittat!"Avsluta omAvsluta Sub |
Instr och den vänstra funktionen
Instr kan användas tillsammans med andra textfunktioner som vänster, höger, len och mitten för att trimma text.
Med funktionen Vänster kan du mata ut texten före en textsträng:
1234567891011 | Sub Instr_Left ()Dim str As StringDim n As Longstr = "Titta här"n = InStr (str, "Här")MsgBox vänster (str, n - 1)Avsluta Sub |
Använda Instr i Microsoft Access VBA
Alla ovanstående exempel fungerar exakt likadant i Access VBA som i Excel VBA.
För mer information, läs vår artikel: VBA -textfunktioner