Hur man hittar strängar med VBA i Excel (8 exempel)

  • Dela Detta
Hugh West

Genomförande av VBA är den mest effektiva, snabbaste och säkraste metoden för att utföra alla operationer i Excel. I den här artikeln kommer vi att visa dig hur du hittar vissa strängar i en annan given sträng med hjälp av VBA i Excel.

Ladda ner Mall för praxis

Du kan ladda ner den kostnadsfria Excel-mallen för övningar här.

VBA för att hitta i String.xlsm

InStr-funktion

Microsoft Excel har en inbyggd funktion som heter InStr-funktionen för att hitta positionen för specifika strängar i en given String.

Generisk syntax:

InStr([start], string1, string2, [jämför])

Här,

Argument Obligatoriskt/ frivilligt Definition
starta Valfritt Startposition för sökningen.
  • Som standard är InStr funktionen beräknar teckenpositionen genom att räkna från 1, inte från startpositionen. Du kan alltså lämna detta tomt om du vill.
sträng1 Krävs Den sträng som ska sökas i, primär sträng.
sträng2 Krävs Den sträng som ska sökas i den primära strängen.
jämför Valfritt InStr funktionen är som standard skiftlägeskänslig. Men om du vill köra en skiftlägeskänslig InStr kan du skicka argumentet här för att utföra en viss jämförelse. Argumentet kan ha följande värden,
  • vbBinaryCompare -> utför en binär jämförelse, återger värdet 0
  • vbTextCompare -> utför en textjämförelse, returvärde 1
  • vbDatabaseCompare -> utför en databasjämförelse, returvärde 2

Som standard, InStr tar vbBinaryCompare som jämförelseargument.

8 enkla exempel för att hitta en specifik strängposition i en given sträng med hjälp av VBA

Låt oss se några enkla exempel för att få fram positionerna för vissa strängar i en given sträng med hjälp av VBA .

1. VBA för att hitta positionen för en text i en sträng

Nedan följer ett exempel på InStr för att hitta positionen för en text i en sträng.

  • Tryck på Alt + F11 på tangentbordet eller gå till fliken Utvecklare -> Visual Basic för att öppna Redigerare för Visual Basic .

  • I popup-kodfönstret klickar du i menyraden på Infoga -> Modul .

  • I kodfönstret skriver du nu en enkel InStr program i en VBA Subprocedur (se nedan).
 Sub INSTR_Example() MsgBox InStr("Lycka är ett val", "val") End Sub 

Din kod är nu redo att köras.

  • Tryck på F5 på tangentbordet eller välj i menyraden Kör -> Kör Sub/UserForm Du kan också bara klicka på liten Play-ikon i undermenyfältet för att köra makrot.

Du kommer att se att popup-meddelanderutan ger dig en nummer som anger positionen i den text som du vill kontrollera.

Förklaring:

Vår primära sträng, " Lycka är ett val " är en mening med 21 bokstäver (med mellanslag) och vi vill hitta positionen för texten " val " i den strängen. Texten " val " började från 16:e positionen på den primära strängen, och därför fick vi nummer 16 som vårt resultat i meddelanderutan.

2. VBA för att hitta text från en specifik position i en sträng

Låt oss nu ta reda på vad som skulle hända om vi ville få fram positionen från ett visst tal.

  • På samma sätt som tidigare, öppna Redigerare för Visual Basic från Utvecklare och Infoga a Modul i kodfönstret.
  • I kodfönstret skriver du en enkel InStr programmet som visas ovan och överför värdet i argumentet start till den position som du vill räkna texten från.
 Sub INSTR_Example() MsgBox InStr(17, "Lycka är ett val", "val") End Sub 

  • Nästa, Kör koden.

Du kommer att se att popup-meddelanderutan ger dig en nummer som anger positionen av texten Utgå från en viss position. som du ville kontrollera.

Förklaring:

Eftersom vi redan visste (från diskussionen i fas 1) att texten " val " från positionen 16 , så vi har infört två " val " i den primära strängen och ange 17 som vår första parameter för att hoppa över den första " val ". Så vi Kör ovanstående makro och det visade oss positionsnummer 27 vilket är exakt samma positionsnummer som i andra " val " i den givna strängen.

3. VBA för att hitta text med funktionen InStr som inte tar hänsyn till stora och små bokstäver i strängar

Från och med inledningen av InStr funktion vet du redan att som standard är InStr funktionen är skiftlägeskänslig. Låt oss ta reda på det med ett exempel.

Se följande VBA kod, där vi ville hitta positionen för ordet " Val " med en stort "C" i strängen " Lycka är ett val " där valet skrivs med en litet "c" .

  • Kör koden och hitta 0 som vårt resultat.

Detta beror på att InStr funktionen behandlar stort "C" och litet "c" på olika sätt. Så den sökte efter ordet " Val " i strängen och fick ingen träff, så vi returnerade 0 .

  • För att göra InStr funktion Skiftlägeskänslig , ange argumentet compare till vbTextCompare (se nedan).
 Sub INSTR_Example() MsgBox InStr(1, "Lycka är ett val och val", "Val", "Choice", vbTextCompare) End Sub 

  • Kör koden.

Du kommer att få följande Textens position från strängen, oavsett om texten är skriven på stora bokstäver eller små bokstäver .

4. VBA för att hitta text till höger i en sträng

Hittills har InStr funktionen gav oss bara positionen från strängens vänstra sida. Men vad händer om du vill hitta textpositionen från strängens högra sida?

Funktionen InStrRev söker från höger. InStrRev fungerar på samma sätt som funktionen InStr funktionen och den kommer att hitta positionen för en text från höger sida av strängen.

Se följande exempel för att förstå skillnaden.

  • Om vi kör följande kod med InStr funktion då,

den ger oss positionen ( 16 ) i den första texten " val ".

  • Men om vi kör samma kod med InStrRev Funktion då,

den ger oss positionen ( 27 ) i den sista texten " val ".

Liknande läsningar:

  • FindNext med VBA i Excel (2 exempel)
  • Hitta och ersätta med VBA (11 sätt)
  • Hitta exakt matchning med VBA i Excel (5 sätt)

5. VBA för att hitta positionen för ett tecken i en sträng

Du kan också hitta positionen för ett visst tecken i en sträng på samma sätt som du hittar text.

  • Kopiera följande kod till din VBA kodfönster
 Sub Find_Character() Dim z As Long z = InStr("Lycka är ett val", "e") MsgBox z End Sub 

  • Och Kör makro.

Den första " e " i vår givna sträng är på nummer 7 position.

6. VBA för att hitta delsträngar i en sträng

Här ska vi lära oss hur man tar reda på om en sträng innehåller en delsträng eller inte.

För att få det måste vi köra en IF-uttalande i vår kod.

  • På samma sätt som tidigare, öppna Redigerare för Visual Basic från Utvecklare och Infoga a Modul i kodfönstret.
  • I kodfönstret kopierar du följande kod och klistrar in den.
 Public Sub FindSub() If InStr("Happiness is a choice", "choice") = 0 Then MsgBox "No match found" Else MsgBox "Match found" End If End Sub 

Din kod är nu redo att köras.

  • Kör makro.

Om din strängen innehåller delsträngen får du en match hittad , annars kommer den att ge resultatet att ingen matchning har hittats. I vårt exempel ville vi ta reda på om vår primära sträng " Lycka är ett val " innehåller ordet " val " eller inte. Om den gör det, får vi en Matchning hittad resultat.

7. VBA för att hitta strängar i ett cellområde

Du kan söka efter en viss text i ett cellintervall av strängar och returnera en viss sträng.

Titta på följande exempel där vi hittar " Dr. " och när det finns en matchning kommer den att återge " Doktor ".

  • Nedan följer koden för att få det resultat som beskrivs ovan,
 Sub Find_String_in_Range() Dim cell As Range For Each cell In Range("B5:B10") If InStr(cell.Value, "Dr.")> 0 Then cell.Offset(0, 1).Value = "Doctor" End If Next cell End Sub 

  • Kör koden och resultatet visas nedan

  • Du kan ändra makrot efter dina behov. Om du till exempel vill hitta " Prof. " i någon cell i strängen, och får " Professor " som retur, skicka då helt enkelt " Prof. " som värde i stället för " Dr ." på den fjärde raden i makrot och " Professor " i stället för " Doktor " på den femte raden i makrot och definiera cellintervallets nummer i enlighet med detta.

8. VBA för att hitta strängar i en cell

Du kan också söka efter en viss text i en enskild cell i strängen och återger en viss sträng.

  • Kopiera följande kod och klistra in den i kodfönstret.
 Sub Find_String_in_Cell() If InStr(Range("B5").Value, "Dr.")> 0 Then Range("C5").Value = "Doctor" End If End Sub 

Den söker efter " Dr. " i Cell B5 och om den hittar en matchning returnerar den " Doktor " i Cell C5 .

  • Du kan ändra makrot efter dina behov. Om du till exempel vill hitta " Prof. " i någon cell i strängen, och får " Professor " som retur, skicka då helt enkelt " Prof. " som värde i stället för " Dr ." på den andra raden i makrot och " Professor " i stället för " Doktor "i den tredje raden i makrot och definiera cellreferensnumret i enlighet med detta.

Slutsats

Den här artikeln visade hur du kan hitta vissa texter i en sträng i Excel med hjälp av VBA-makro. Jag hoppas att denna artikel har varit till stor nytta för dig, och du får gärna ställa frågor om ämnet.

Hugh West är en mycket erfaren Excel-tränare och analytiker med över 10 års erfarenhet i branschen. Han har en kandidatexamen i redovisning och ekonomi och en magisterexamen i företagsekonomi. Hugh har en passion för undervisning och har utvecklat ett unikt undervisningssätt som är lätt att följa och förstå. Hans expertkunskap om Excel har hjälpt tusentals studenter och yrkesverksamma över hela världen att förbättra sina färdigheter och utmärka sig i sina karriärer. Genom sin blogg delar Hugh med sig av sin kunskap med världen, och erbjuder gratis Excel-handledning och onlineutbildning för att hjälpa individer och företag att nå sin fulla potential.