Excel VBA InStr -funktion - förklaras med exempel

Innehållsförteckning

Igår fick jag ett mejl från en av mina läsare - juni.

Hon ville veta hur man applicerar fetstilstypformat på en specifik del av en sträng i en cell. Till exempel, tillämpa det fetstilade formatet endast på ordet "Hej" från "Hej världen".

Och hon ville göra detta för hundratals celler samtidigt.

Eftersom det inte finns någon inbyggd funktionalitet i Excel som kan göra det skapade jag ett enkelt makro som använder Excel VBA InStr -funktion (du kommer att se hur du gör detta i exempel 4 i denna handledning).

Men låt oss först se hur Excel VBA InStr -funktionen fungerar!

Excel VBA InStr -funktion

I denna handledning kommer jag att förklara användningen av InStr -funktionen i Excel VBA och se några praktiska exempel där den kan användas.

Excel VBA InStr -funktion - Introduktion

InStr -funktionen hittar positionen för en angiven delsträng inom strängen och returnerar den första positionen för dess förekomst.

Till exempel, om du vill hitta positionen för 'x' i 'Excel', skulle Excel VBA InStr -funktionen returnera 2.

Syntax för InStr -funktion

InStr ([Start], String1, String2, [Jämför])
  • [Start] - (valfritt argument) detta är ett heltal som berättar för InStr -funktionen startpositionen från vilken den ska börja leta. Till exempel, om jag vill att sökningen ska börja från början, anger jag värdet som 1. Om jag vill att det ska börja med det tredje tecknet och framåt, använder jag 3. Om det utelämnas tas standardvärdet 1.
  • Sträng 1 - Det här är huvudsträngen (eller den överordnade strängen) som du vill söka i. Till exempel, om du letar efter positionen för x i Excel, skulle sträng 1 vara "Excel".
  • Sträng 2 - Det här är delsträngen du söker efter. Till exempel, om du letar efter positionen för x i Excel, skulle String2 vara x.
  • [Jämföra] - (valfritt argument) Du kan ange ett av följande tre värden för [jämför] -argument:
    • vbBinaryCompare - Detta skulle göra en karaktär för karaktärsjämförelse. Till exempel, om du letar efter 'x' i 'Excel', kommer det att returnera 2, men om du letar efter 'X' i 'Excel', kommer det att returnera 0 som X är i versaler. Du kan också använda 0 istället för vbBinaryCompare. Om [Jämför] -argumentet utelämnas, tas detta som standard.
    • vbTextCompare - Detta skulle göra en textmässig jämförelse. Till exempel, om du letar efter 'x' eller 'X' i Excel, skulle det returnera 2 i båda fallen. Detta argument ignorerar bokstavsfallet. Du kan också använda 1 istället för vbTextCompare.
    • vbDatabaseCompare - Detta används endast för Microsoft Access. Den använder informationen i databasen för att utföra jämförelsen. Du kan också använda 2 istället för vbDatabaseCompare.

Ytterligare anmärkningar om Excel VBA InStr -funktion:

  • InStr är en VBA -funktion och inte en kalkylbladsfunktion. Det betyder att du inte kan använda det i kalkylbladet.
  • Om String2 (som är delsträngen vars position du letar efter) är tom, skulle funktionen returnera värdet på [Start] -argumentet.
  • Om InStr -funktionen inte kan hitta delsträngen i huvudsträngen skulle den returnera 0.

Låt oss nu titta på några exempel på hur du använder Excel VBA InStr -funktionen

Exempel 1 - Hitta positionen från början

I det här exemplet kommer jag att använda InStr -funktionen för att hitta positionen för 'V' i 'Excel VBA' från början.

Koden för detta skulle vara:

Sub FindFromBeginning () Dim Position As Integer Position = InStr (1, "Excel VBA", "V", vbBinaryCompare) MsgBox Position End Sub

När du kör den här koden kommer den att visa en meddelanderuta med värdet 7, vilket är positionen för 'V' i strängen 'Excel VBA'.

Exempel 2 - Hitta positionen från början av det andra ordet

Antag att jag vill hitta positionen för 'the' i meningen - 'Den snabba bruna räven hoppar över den lata hunden'

Jag vill dock att sökningen ska börja med det andra ordet och framåt.

I det här fallet måste vi ändra [Start] -argumentet för att se till att det anger positionen från var det andra ordet börjar.

Här är koden som gör detta:

Sub FindFromSecondWord () Dim Position As Integer Position = InStr (4, "The quick brown fox jumps over the lat dog", "the", vbBinaryCompare) MsgBox Position End Sub

Denna kod visar meddelandefältet med värdet 32 ​​som vi har angett utgångsläget som 4. Därför ignoreras det första "The" och hittar det andra "the" i meningen.

Om du vill göra den mer dynamisk kan du förbättra koden så att den automatiskt ignorerar det första ordet.

Här är den förbättrade koden som gör detta:

Sub FindFromSecondWord () Dim StartPosition As Integer Dim Position As Integer StartPosition = InStr (1, "Den snabba bruna räven hoppar över den lata hunden", "", vbBinaryCompare) Position = InStr (StartPosition, "Den snabba bruna räven hoppar över lat hund "," the ", vbBinaryCompare) MsgBox Position End Sub

Den här koden hittar först positionen för ett mellanslagstecken och lagrar den i variabeln StartPosition.

Den använder sedan denna variabel som utgångsläge för att leta efter ordet "the".

Därför returnerar den 32 (vilket är utgångsläget för 'the' efter det första ordet).

Exempel 3 - Hitta positionen för @ i e -postadressen

Du kan enkelt skapa en anpassad funktion för att hitta positionen för @ i en e -postadress med hjälp av Excel VBA InStr -funktionen.

Här är koden för att skapa den anpassade funktionen:

Funktion FindPosition (Ref As Range) As Integer Dim Position As Integer Position = InStr (1, Ref, "@") FindPosition = Position End Function

Nu kan du använda den här anpassade funktionen som alla andra kalkylbladsfunktioner. Det kommer att ta en cellreferens som inmatning och ge dig positionen för @ i den.

På samma sätt kan du skapa en anpassad funktion för att hitta positionen för en delsträng inom huvudsträngen.

Exempel 4 - Markering av en del av strängen inom celler

Detta är frågan som ställdes av June (min läsare som också inspirerade mig att skriva denna handledning).

Här är en provdata i det format som juni skickade mig:

Hennes fråga var att göra siffrorna utanför parentesen djärva.

Här är koden jag skapade som gör detta:

Sub fet () Dim rCell som intervall Dim Char som heltal För varje rCell i urval CharCount = Len (rCell) Char = InStr (1, rCell, "(") rCell.Characters (1, Char - 1) .Font.Bold = True Next rCell End Sub

Koden ovan använder slingan För varje för att gå igenom var och en av cellerna i urvalet. Den identifierar positionen för öppningsfästet med hjälp av InStr -funktionen. Det ändrar sedan textens teckensnitt före parentesen.

För att använda den här koden måste du kopiera och klistra in en modul i VB -redigeraren.

När du har kopierat klistrat in koden markerar du cellerna där du vill göra denna formatering och kör makrot (som visas nedan).

Du kanske också gillar följande Excel VBA -självstudier:

  • Excel VBA SPLIT -funktion.
  • VBA TRIM -funktion.
  • Den ultimata guiden till Excel VBA -slingor.
  • En nybörjarguide för att använda för nästa loop i Excel VBA.
  • Hur man skapar och använder ett Excel-tillägg.
  • Hur man kombinerar flera arbetsböcker till en Excel -arbetsbok.
  • Hur man räknar färgade celler i Excel.
  • Användbara Excel VBA -makroexempel för nybörjare.
  • Så här sorterar du data i Excel med VBA (en steg-för-steg-guide)

Du kommer att bidra till utvecklingen av webbplatsen, dela sidan med dina vänner

wave wave wave wave wave