Om du har skrivit mer än ett par VBA-makron har du förmodligen stött på läget där du behöver kontrollera om viss text finns i en cell. I VBA är InStr en av de funktioner du använder överallt. Den talar om var en bit text förekommer i en annan. Du kan använda den för att kontrollera om text finns i en cell, tolka värden i en text eller styra villkorslogik i makron som beror på textmönster.
I den här guiden går jag igenom InStr-syntaxen, några exempel, hur jämförelselägen fungerar (den här delen ställer till det för fler än den borde) och några mönster du faktiskt kommer att återanvända.
Jag rekommenderar att du börjar med vår Excel Fundamentals-spår för att bygga en stabil grund innan du går vidare till VBA, eller gå vår kurs Advanced Excel Functions om du har lite erfarenhet, för att lära dig mer om hur funktioner ökar effektiviteten i dataanalys.
Vad är VBA-funktionen InStr?
InStr är en VBA-funktion som returnerar positionen för den första förekomsten av en sträng inuti en annan.
Resultaten beter sig så här:
Om en träff hittas returneras ett tal (positionen där träffen börjar)
Om inget hittas returneras 0
Till exempel, om ”cat” förekommer på position 5 i en sträng, får du 5. Om den inte finns där får du 0.
VBA InStr-syntax
Här är hela InStr-syntaxen:
InStr([start], string1, string2, [compare])Drivs av
Där:
start (valfritt): Anger var VBA ska börja sökningen. Om du hoppar över det börjar VBA från position 1.
string1 (obligatoriskt): Hela texten du söker i.
string2 (obligatoriskt): Texten du försöker hitta.
compare (valfritt): Definierar hur jämförelsen görs (skiftlägeskänsligt eller inte). Om du utelämnar det använder VBA standardläget för jämförelse, vanligtvis skiftlägeskänsligt.
Observera att du kan ignorera argumenten start och compare (InStr(string1, string2)) för en enklare variant. Men om du väljer att använda argumentet compare måste du också ange argumentet start.
Så fungerar VBA InStr
Tänk på InStr som att läsa en mening från vänster till höger, ett tecken i taget.
Funktionen börjar med string1, skannar igenom den och letar efter den första platsen där string2 matchar. I samma ögonblick som den hittar en matchning stannar den och returnerar positionen där den började.
”Matchnings”-positionen är viktig eftersom VBA räknar från 1, inte 0. Så det första tecknet i en sträng är position 1, det andra är 2, och så vidare.
Returnerade värden i VBA InStr förklarade
Att tolka resultatet av en InStr-funktion är rakt på sak. Du kan få något av följande:
Positivt tal: Om en träff hittas, och talet anger var den börjar.
0: Om det inte finns någon träff någonstans i strängen
Men om dina inmatade strängar är Null returnerar funktionen Null. Även om du kan bortse från detta i enklare makron är det värt att notera att skillnaden tyst kan fälla ett villkor.
Grundläggande exempel på VBA InStr
Nu ska jag visa några exempel på hur du använder VBA-funktionen InStr.
Hitta ett ord i en mening
För att kontrollera om ordet ”before” finns i anteckningen ”Deliver before noon”.
Sub Before()
Dim result As Integer
result = InStr("Deliver before noon", "before")
MsgBox result
End SubDrivs av
Resultatet för VBA-koden ovan är 9 eftersom ”before” börjar vid det 9:e tecknet.
Kontrollera om ett tecken finns
För att kontrollera om tecknet ”0” finns i en given sträng, använd VBA:
Sub ChExist()
Dim result As Integer
result = InStr(“A1023”, “0”)
MsgBox result
End SubDrivs av
I detta fall betyder alla resultat större än 0 att tecknet har hittats.
Sök från början av en sträng
För att söka från början av en sträng behöver du inte ange startposition, så den börjar vid 1. Det är standard varje gång om du inte säger något annat.
Sub ChExist()
Dim result As Integer
result = InStr("Report_2026_Final", "2026")
MsgBox result
End SubDrivs av
Så använder du VBA InStr i If-satser
När du arbetar med ett riktigt kalkylblad letar du inte bara efter ett tal; du försöker fatta ett beslut. Det vanligaste sättet att använda InStr är inuti en If-sats för att filtrera data.
Genom hela den här handledningen använder vi ett exempeldataset, Orders, med kolumnerna: ID, CustomerName, Email, City och OrderNotes.
If InStr(...) > 0 Then
Eftersom InStr returnerar 0 när den inte hittar något, kontrollerar vi om resultatet finns när det returnerar ett tal större än 0.
I exemplet nedan tittar den på kolumnen OrderNotes (kolumn 5). Om den hittar ordet ”Fragile” skriver den ”Handle Carefully” i kolumn 6.
Sub ChExist()
Dim i As Integer
' Loop through rows 2 to 51
For i = 2 To 51
' Check if the order notes mention "Fragile"
If InStr(Cells(i, 5).Value, "Fragile")>0 Then
Cells(i, 6).Value ="Handle Carefully"
End If
Next i
End SubDrivs av
Villkorskontroller för nyckelord och textfiltrering
Du kan också använda funktionen InStr för att söka efter nyckelord i strängar, särskilt om frasen varierar lite. Till exempel kontrollerar koden nedan om anteckningen innehåller ”Call” (som ”Call on arrival” eller ”Call before delivery”). Den flaggar sedan och lägger till taggen ”Cal Customer” i kolumn 6.
Sub ChExist()
Dim i As Integer
' Loop through rows 2 to 51
For i = 2 To 51
' Check if the order notes mention “Call”
If InStr(Cells(i, 5).Value, “Call”)>0 Then
Cells(i, 6).Value = “Call Customer”
End If
Next i
End SubDrivs av
Skiftlägeskänslighet och jämförelsepresentation i VBA InStr
Som standard är InStr skiftlägeskänslig (kallas vbBinaryCompare). Säg att du söker efter ”chicago” men datan säger ”Chicago” – InStr kommer då att returnera 0.
För att åtgärda detta använder du argumentet compare där:
vbBinaryCompare (standard): skiftlägeskänslig (”A” är inte samma som ”a”.)
vbTextCompare: inte skiftlägeskänslig – ”A” är samma som ”a”.
I exemplet nedan returnerar InStr0 eftersom den letar efter ”fragile” (gemener) i ”Fragile items”.
Sub CheckFragile()
Dim result As Integer
result = InStr(1, "Fragile items", "fragile", vbBinaryCompare)
MsgBox result
End SubDrivs av
Men med vbTextCompare returneras 1 genom samma sökning eftersom skiftläget ignoreras.
Sub CheckFragile()
Dim result As Integer
result = InStr(1, "Fragile items", "fragile", vbTextCompare)
MsgBox result
End SubDrivs av
VBA InStr med startposition
Ibland vill du inte börja en sökning i början av strängen. Argumentet start talar om för VBA var sökningen ska börja.
I exemplet nedan är argumentet start satt till 10, så VBA börjar söka från det 10:e tecknet i stället för det första. Den hittar sedan "delivery" senare i strängen.
Sub CheckUrgent()
Dim result As Integer
result = InStr(10, “Deliver before noon - urgent delivery”, “delivery”)
MsgBox result
End SubDrivs av
Resultatet av exemplet ovan är 31, vilket är positionen där "delivery" börjar.
Den här metoden är användbar när du vill ha den andra förekomsten av något eller ignorera ett känt prefix när du arbetar med upprepade mönster.
VBA InStr vs. InStrRev
Som du redan lärt dig söker InStr från vänster till höger. InStrRev söker däremot från höger till vänster.
Till exempel har vi använt InStrRev för att hitta sista punkten i e-postadressen. Resultatet är 18, vilket är positionen för punkten före ”com”.
Sub CheckChr()
Dim result As Integer
result = InStrRev("[email protected]", ".")
MsgBox result
End SubDrivs av
Du kommer att ha mer nytta av InStrRev när du behöver den sista förekomsten av något eller när du arbetar med filnamn, e-postadresser eller sökvägar.
Vanliga användningsfall för VBA InStr
Nu när vi har tittat på exempel på hur VBA-funktionen InStr fungerar, låt oss titta på vanliga användningsfall.
Kontrollera om en cell innehåller ett nyckelord
Anta att du har ett dataset med kundbeställningar och behöver flagga beställningar för särskild hantering. Koden tittar på kolumnen OrderNotes och flaggar allt med ”noon”.
Sub ChExist()
Dim i As Integer
' Loop through rows 2 to 51
For i = 2 To 51
If InStr(1, "Deliver before noon", "noon", vbTextCompare) > 0 Then
' Logic to mark as "Morning Delivery"
End If
Next i
End SubDrivs av
Validera text i e-poststil
Du kan också använda funktionen InStr för att snabbt kontrollera giltiga e-postformat. Till exempel kontrollerar koden nedan om e-postadressen innehåller @ och returnerar ”Valid Email Format” i kolumn 6.
Sub ValidateEmail()
Dim i As Integer
' Loop through rows 2 to 51
For i =2 To 51
If InStr(Cells(i, 3).Value, "@")>0 Then
Cells(i, 6).Value ="Valid Email Format"
End If
Next i
End SubDrivs av
Upptäcka avgränsare som kommatecken eller bindestreck
Du kan använda funktionen InStr för att kontrollera om ett bindestreck, kommatecken eller snedstreck finns i text. I exemplet nedan loopar koden genom OrderNotes (kolumn E), kontrollerar om det finns ett kommatecken i texten och skriver sedan ett resultat i kolumn F.
Sub ValidateEmail()
Dim i As Integer
Dim commaPos As Integer
Dim OrderNotes As String
For i =2 To 51
OrderNotes = Cells(i, 5).Value
commaPos = InStr(1, OrderNotes, ",")
' If a comma exists, mark it
If commaPos >0 Then
Cells(i, 6).Value ="Has comma"
Else
Cells(i, 6).Value ="No comma"
End If
Next i
End SubDrivs av
Vanliga misstag med VBA InStr
Även som erfaren utvecklare kan du stöta på problem med funktionen InStr som gör att koden beter sig oväntat. Nedan följer vanliga problem jag har stött på och hur du kan lösa dem:
Glömmer att InStr är 1-baserad: Kom alltid ihåg att positioner börjar på 1, inte 0. Om du kommer från Python eller JavaScript känns detta fel i början.
Behandlar InStr som True/False: Kom ihåg att InStr inte returnerar True eller False. Om du vill hitta något måste du kontrollera om resultatet är > 0.
Ignorerar skiftlägeskänslighet: Som du nu vet är InStr skiftlägeskänslig som standard. Om skiftläge inte spelar någon roll, säg det med vbTextCompare i argumentet compare.
Blandar ihop string1 och string2: Kom alltid ihåg att det första argumentet är där du söker. Det andra är vad du letar efter. Om du söker så här InStr(SearchTerm, FullText) får du alltid 0.
VBA InStr vs. andra VBA-strängfunktioner
Eftersom InStr vanligtvis visar var en sträng finns i en text, låt oss jämföra den med andra strängfunktioner.
InStr vs. Like
Operatorn Like används för mönstermatchning. Till exempel kontrollerar koden nedan efter ”Fragile”, men använder ett mönster *, vilket betyder ”vad som helst före eller efter”.
Sub ChExist()
Dim i As Integer
' Loop through rows 2 to 51
For i =2 To 51
If Cells(i, 5).Value Like "*Fragile*" Then
Cells(i, 6).Value ="Handle Carefully"
End If
Next i
End SubDrivs av
Använd InStr om du bara behöver veta om text finns, och Like när du behöver kontrollera text i komplexa mönster.
InStr vs. Replace
Även om du kan använda InStr för att ändra hela värdet i en cell, ändrar funktionen Replace specifik text i cellen.
I exemplet nedan byter funktionen Replace direkt ut ”Fragile” mot ”Handle Carefully” i texten.
Sub ReplaceOrder()
Dim i As Integer
For i =2 To 51
Cells(i, 5).Value = Replace(Cells(i, 5).Value, "Fragile", "Handle Carefully")
Next i
End SubDrivs av
InStr vs. Mid
Funktionen Mid används för att extrahera text från en sträng. Därför använder du ofta Mid tillsammans med InStr för att extrahera texten efter att du fått dess position.
Koden nedan extraherar domänen från e-postadresser i datasetet. Funktionen InStr hittar var "@" förekommer i e-postadressen, sedan börjar Mid extraktionen efter den. Koden avslutas med att skriva domänen i kolumn H.
Sub ExtractDomain()
Dim i As Integer
Dim pos As Integer
Dim domain As String
For i =2 To 51
pos = InStr(1, Cells(i, 3).Value, "@")
If pos >0 Then
domain = Mid(Cells(i, 3).Value, pos + 1)
Cells(i, 8).Value = domain
End If
Next i
End SubDrivs av
InStr vs.Split
Funktionen Split används för att dela upp text i delar genom att ange en avgränsare.
I exemplet nedan läser koden varje rad från kolumn A, kontrollerar om det finns ett kommatecken och delar sedan upp texten i två delar. Den skriver Name → kolumn B och City → kolumn C.
Sub SplitTextColumn()
Dim i As Integer
Dim lastRow As Integer
Dim parts As Variant
Dim text As String
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i =2 To lastRow
text = Cells(i, 1).Value
' Only split if a comma exists
If InStr(1, text, ",") > 0 Then
parts = Split(text, ",")
Cells(i, 2).Value = parts(0) ' Name
Cells(i, 3).Value = parts(1) ' City
End If
Next i
End SubDrivs av
Bästa praxis för att använda VBA InStr
För att undvika fel i din VBA rekommenderar jag följande bästa praxis, som har hjälpt mig att spara tid:
Använd vbTextCompare när skiftläge inte spelar roll: Eftersom de flesta verkliga data inte är konsekventa i skiftläge kan du missa träffar om du förlitar dig på standard-argument för jämförelse.
Kombinera med ”If” för tydlig logik: Försök alltid inkludera logik som returnerar ett värde, eftersom InStr i sig bara ger dig ett tal.
Kontrollera > 0, inte exakta positioner, om du inte faktiskt behöver positionen.
Gör parsning läsbar. Kasta inte in för många funktioner på en rad.
Slutsats
InStr är enkel, men du kommer att använda den överallt. Den ger dig positionen för en sträng inuti en annan, och det enda talet driver många beslut i VBA: om något finns, var du ska extrahera från och vad ett makro ska göra härnäst. I sig är den bara en sökning. I kombination med funktioner som Mid, Replace eller till och med Split blir den en del av ett arbetsflöde som faktiskt får saker gjorda.
Den returnerar positionen där träffen börjar. Om inget hittas returnerar den 0.
Är InStr skiftlägeskänslig?⌄
Ja, InStr är skiftlägeskänslig som standard. ”Fragile” och ”fragile” behandlas som olika. Använd vbTextCompare om du inte vill ha en skiftlägeskänslig jämförelse.
Vad betyder det att InStr är 1-baserad?⌄
Det första tecknet i en sträng är position 1, inte 0. Detta har betydelse när du använder resultatet i andra funktioner.
Vad händer om ett av värdena är Null?⌄
Resultatet blir också Null, inte 0.
Vad är skillnaden mellan InStr och InStrRev?⌄
InStr söker från vänster till höger, medan InStrRev börjar från höger till vänster. Använd den senare när den sista förekomsten är viktig.
Få de viktigaste färdigheterna du behöver för att använda Excel, från att förbereda data till att skriva formler och skapa visualiseringar. Ingen tidigare erfarenhet krävs.
Om du har skrivit mer än ett par VBA-makron har du förmodligen stött på läget där du behöver kontrollera om viss text finns i en cell. I VBA är
InStren av de funktioner du använder överallt. Den talar om var en bit text förekommer i en annan. Du kan använda den för att kontrollera om text finns i en cell, tolka värden i en text eller styra villkorslogik i makron som beror på textmönster.I den här guiden går jag igenom
InStr-syntaxen, några exempel, hur jämförelselägen fungerar (den här delen ställer till det för fler än den borde) och några mönster du faktiskt kommer att återanvända.Jag rekommenderar att du börjar med vår Excel Fundamentals-spår för att bygga en stabil grund innan du går vidare till VBA, eller gå vår kurs Advanced Excel Functions om du har lite erfarenhet, för att lära dig mer om hur funktioner ökar effektiviteten i dataanalys.
Vad är VBA-funktionen InStr?
InSträr en VBA-funktion som returnerar positionen för den första förekomsten av en sträng inuti en annan.Resultaten beter sig så här:
Till exempel, om ”cat” förekommer på position 5 i en sträng, får du
5. Om den inte finns där får du0.VBA InStr-syntax
Här är hela
InStr-syntaxen:Där:
start(valfritt): Anger var VBA ska börja sökningen. Om du hoppar över det börjar VBA från position 1.string1(obligatoriskt): Hela texten du söker i.string2(obligatoriskt): Texten du försöker hitta.compare(valfritt): Definierar hur jämförelsen görs (skiftlägeskänsligt eller inte). Om du utelämnar det använder VBA standardläget för jämförelse, vanligtvis skiftlägeskänsligt.Observera att du kan ignorera argumenten
startochcompare(InStr(string1, string2)) för en enklare variant. Men om du väljer att använda argumentetcomparemåste du också ange argumentetstart.Så fungerar VBA InStr
Tänk på
InStrsom att läsa en mening från vänster till höger, ett tecken i taget.Funktionen börjar med
string1, skannar igenom den och letar efter den första platsen därstring2matchar. I samma ögonblick som den hittar en matchning stannar den och returnerar positionen där den började.”Matchnings”-positionen är viktig eftersom VBA räknar från 1, inte 0. Så det första tecknet i en sträng är position 1, det andra är 2, och så vidare.
Returnerade värden i VBA InStr förklarade
Att tolka resultatet av en
InStr-funktion är rakt på sak. Du kan få något av följande:Positivt tal: Om en träff hittas, och talet anger var den börjar.
0: Om det inte finns någon träff någonstans i strängenMen om dina inmatade strängar är
Nullreturnerar funktionenNull. Även om du kan bortse från detta i enklare makron är det värt att notera att skillnaden tyst kan fälla ett villkor.Grundläggande exempel på VBA InStr
Nu ska jag visa några exempel på hur du använder VBA-funktionen
InStr.Hitta ett ord i en mening
För att kontrollera om ordet ”before” finns i anteckningen ”Deliver before noon”.
Resultatet för VBA-koden ovan är
9eftersom ”before” börjar vid det 9:e tecknet.Kontrollera om ett tecken finns
För att kontrollera om tecknet ”0” finns i en given sträng, använd VBA:
I detta fall betyder alla resultat större än
0att tecknet har hittats.Sök från början av en sträng
För att söka från början av en sträng behöver du inte ange startposition, så den börjar vid 1. Det är standard varje gång om du inte säger något annat.
Så använder du VBA InStr i If-satser
När du arbetar med ett riktigt kalkylblad letar du inte bara efter ett tal; du försöker fatta ett beslut. Det vanligaste sättet att använda
InSträr inuti enIf-sats för att filtrera data.Genom hela den här handledningen använder vi ett exempeldataset,
Orders, med kolumnerna:ID,CustomerName,Email,CityochOrderNotes.If InStr(...) > 0 Then
Eftersom
InStrreturnerar0när den inte hittar något, kontrollerar vi om resultatet finns när det returnerar ett tal större än0.I exemplet nedan tittar den på kolumnen
OrderNotes(kolumn 5). Om den hittar ordet ”Fragile” skriver den ”Handle Carefully” i kolumn 6.Villkorskontroller för nyckelord och textfiltrering
Du kan också använda funktionen
InStrför att söka efter nyckelord i strängar, särskilt om frasen varierar lite. Till exempel kontrollerar koden nedan om anteckningen innehåller ”Call” (som ”Call on arrival” eller ”Call before delivery”). Den flaggar sedan och lägger till taggen ”Cal Customer” i kolumn 6.Skiftlägeskänslighet och jämförelsepresentation i VBA InStr
Som standard är
InStrskiftlägeskänslig (kallasvbBinaryCompare). Säg att du söker efter ”chicago” men datan säger ”Chicago” –InStrkommer då att returnera0.För att åtgärda detta använder du argumentet
comparedär:vbBinaryCompare(standard): skiftlägeskänslig (”A” är inte samma som ”a”.)vbTextCompare: inte skiftlägeskänslig – ”A” är samma som ”a”.I exemplet nedan returnerar
InStr0eftersom den letar efter ”fragile” (gemener) i ”Fragile items”.Men med
vbTextComparereturneras1genom samma sökning eftersom skiftläget ignoreras.VBA InStr med startposition
Ibland vill du inte börja en sökning i början av strängen. Argumentet
starttalar om för VBA var sökningen ska börja.I exemplet nedan är argumentet
startsatt till10, så VBA börjar söka från det 10:e tecknet i stället för det första. Den hittar sedan"delivery"senare i strängen.Resultatet av exemplet ovan är
31, vilket är positionen där"delivery"börjar.Den här metoden är användbar när du vill ha den andra förekomsten av något eller ignorera ett känt prefix när du arbetar med upprepade mönster.
VBA InStr vs. InStrRev
Som du redan lärt dig söker
InStrfrån vänster till höger.InStrRevsöker däremot från höger till vänster.Till exempel har vi använt
InStrRevför att hitta sista punkten i e-postadressen. Resultatet är18, vilket är positionen för punkten före ”com”.Du kommer att ha mer nytta av
InStrRevnär du behöver den sista förekomsten av något eller när du arbetar med filnamn, e-postadresser eller sökvägar.Vanliga användningsfall för VBA InStr
Nu när vi har tittat på exempel på hur VBA-funktionen
InStrfungerar, låt oss titta på vanliga användningsfall.Kontrollera om en cell innehåller ett nyckelord
Anta att du har ett dataset med kundbeställningar och behöver flagga beställningar för särskild hantering. Koden tittar på kolumnen
OrderNotesoch flaggar allt med ”noon”.Validera text i e-poststil
Du kan också använda funktionen
InStrför att snabbt kontrollera giltiga e-postformat. Till exempel kontrollerar koden nedan om e-postadressen innehåller@och returnerar ”Valid Email Format” i kolumn 6.Upptäcka avgränsare som kommatecken eller bindestreck
Du kan använda funktionen
InStrför att kontrollera om ett bindestreck, kommatecken eller snedstreck finns i text. I exemplet nedan loopar koden genomOrderNotes(kolumn E), kontrollerar om det finns ett kommatecken i texten och skriver sedan ett resultat i kolumn F.Vanliga misstag med VBA InStr
Även som erfaren utvecklare kan du stöta på problem med funktionen
InStrsom gör att koden beter sig oväntat. Nedan följer vanliga problem jag har stött på och hur du kan lösa dem:Glömmer att InStr är 1-baserad: Kom alltid ihåg att positioner börjar på 1, inte 0. Om du kommer från Python eller JavaScript känns detta fel i början.
Behandlar InStr som True/False: Kom ihåg att
InStrinte returnerarTrueellerFalse. Om du vill hitta något måste du kontrollera om resultatet är> 0.Ignorerar skiftlägeskänslighet: Som du nu vet är
InStrskiftlägeskänslig som standard. Om skiftläge inte spelar någon roll, säg det medvbTextComparei argumentetcompare.Blandar ihop string1 och string2: Kom alltid ihåg att det första argumentet är där du söker. Det andra är vad du letar efter. Om du söker så här
InStr(SearchTerm, FullText)får du alltid0.VBA InStr vs. andra VBA-strängfunktioner
Eftersom
InStrvanligtvis visar var en sträng finns i en text, låt oss jämföra den med andra strängfunktioner.InStr vs. Like
Operatorn
Likeanvänds för mönstermatchning. Till exempel kontrollerar koden nedan efter ”Fragile”, men använder ett mönster*, vilket betyder ”vad som helst före eller efter”.Använd
InStrom du bara behöver veta om text finns, ochLikenär du behöver kontrollera text i komplexa mönster.InStr vs. Replace
Även om du kan använda
InStrför att ändra hela värdet i en cell, ändrar funktionenReplacespecifik text i cellen.I exemplet nedan byter funktionen
Replacedirekt ut ”Fragile” mot ”Handle Carefully” i texten.InStr vs. Mid
Funktionen Mid används för att extrahera text från en sträng. Därför använder du ofta
Midtillsammans medInStrför att extrahera texten efter att du fått dess position.Koden nedan extraherar domänen från e-postadresser i datasetet. Funktionen
InStrhittar var "@" förekommer i e-postadressen, sedan börjarMidextraktionen efter den. Koden avslutas med att skriva domänen i kolumn H.InStr vs.Split
Funktionen
Splitanvänds för att dela upp text i delar genom att ange en avgränsare.I exemplet nedan läser koden varje rad från kolumn A, kontrollerar om det finns ett kommatecken och delar sedan upp texten i två delar. Den skriver
Name→ kolumn B ochCity→ kolumn C.Bästa praxis för att använda VBA InStr
För att undvika fel i din VBA rekommenderar jag följande bästa praxis, som har hjälpt mig att spara tid:
Använd vbTextCompare när skiftläge inte spelar roll: Eftersom de flesta verkliga data inte är konsekventa i skiftläge kan du missa träffar om du förlitar dig på standard-
argumentför jämförelse.Kombinera med ”If” för tydlig logik: Försök alltid inkludera logik som returnerar ett värde, eftersom
InStri sig bara ger dig ett tal.Kontrollera > 0, inte exakta positioner, om du inte faktiskt behöver positionen.
Gör parsning läsbar. Kasta inte in för många funktioner på en rad.
Slutsats
InSträr enkel, men du kommer att använda den överallt. Den ger dig positionen för en sträng inuti en annan, och det enda talet driver många beslut i VBA: om något finns, var du ska extrahera från och vad ett makro ska göra härnäst. I sig är den bara en sökning. I kombination med funktioner somMid,Replaceeller till och medSplitblir den en del av ett arbetsflöde som faktiskt får saker gjorda.Gå vår kurs Data Analysis in Excel för att bemästra avancerad analys. Gå också vår Intermediate Power Query in Excel-kurs för att lära dig om datatransformation och hur du använder M-språket.