Hur man använder InStr-funktionen i VBA (3 enkla exempel)

  • Dela Detta
Hugh West

När vi arbetar med Excel VBA-koder stöter vi på några inbyggda funktioner som omvandlar en komplex uppgift till en liten kod på en rad. InStr är en sådan funktion som finns i Excel VBA och som söker efter en viss sträng inom en annan sträng från en viss position. Idag ska jag visa hur du kan använda funktionen InStr i VBA för att söka efter en specifik sträng i en annan given sträng.

Ladda ner övningsboken

InStr-funktion.xlsm

Introduktion till VBA InStr-funktionen

  • Sammanfattning

Söker efter en specifik sträng i en given sträng från en given position. Om en träff hittas returneras positionen i den givna strängen från vilken träffen började.

  • Syntax

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

  • Argument
ARGUMENT FÖRUTSÄTTNINGAR BESKRIVNING

[start] Valfritt Den position från vilken sökningen börjar. Standardvärdet är 1.
sträng1 Krävs Den sträng inom vilken den söker efter en viss sträng.
sträng2 Krävs Den sträng som söks inom en given sträng.
[jämför] Valfritt Ett numeriskt värde mellan {-1,0,1,2} som anger typen av jämförelse. Standardvärdet är -1 (vbUseCompareOption). Om alternativet Compare inte anges utförs binär jämförelse.

Observera:

  • Även om [start] argumentet och den [jämför] argumentet är valfritt, du behöver [start] argumentet om du anger [jämför] I annat fall kommer det att ge upphov till ett fel.
  • Om en av eller båda [start] argumentet och den [jämför] argumentet är Noll får du ett felmeddelande.
  • De fyra angivna värdena i [jämför] argument utför fyra olika typer av jämförelser, som nämns nedan:
VÄRDE KONSTANT BESKRIVNING

-1 vbUseCompareOption Utför den jämförelse som anges i alternativet Jämförelse.
0 vbBinaryCompare Utför en binär jämförelse.
1 vbTextCompare Utför en textjämförelse.
2 vbDatabaseCompare Gör en jämförelse utifrån din databas.
  • Alternativ Jämför är ett uttalande som ges innan VBA-huvudkoden startar. Det anger om koden ska söka efter en binär jämförelse eller en textjämförelse när det behövs.

Alternativ Jämför text

    • Enkelt uttryckt , Binär jämförelse innebär en jämförelse som är känslig för stora och små bokstäver.
    • Enkelt uttryckt , Jämförelse av texter innebär en jämförelse som inte tar hänsyn till stor- och små bokstäver.
  • Returvärde
    • Återger positionen i sträng1 från vilken den sträng2 började.
    • Om sträng2 inte finns inom sträng1 med utgångspunkt från starta position, returnerar 0.
    • Om den sträng1 är av noll längd, returneras 0.
    • Om den sträng2 är av noll längd, returnerar argumentet starta .
    • Och slutligen, om någon av de sträng1 eller . sträng2 är Noll , returnerar ett fel.

3 enkla exempel på hur du använder VBA InStr-funktionen

I det här avsnittet kommer vi att se tre enkla exempel på hur du kan använda VBA InStr funktionen i Excel. Låt oss se det första exemplet på funktionen InStr funktion i VBA-koder.

1. Beslut om huruvida en adress är en e-postadress eller inte genom att använda VBA InStr-funktionen

Här har vi tagit en datamängd som innehåller några kunders kontaktadresser. Vårt mål är att identifiera om adresserna är e-postadresser eller inte.

Nu ska vi utveckla en VBA-kod med hjälp av InStr för att identifiera om det är en e-postadress eller inte. Följ stegen nedan för att göra det.

Steg:

  • Till att börja med går du till Utvecklare och välj Visual Basic ( Eller tryck på Alt+F11) för att öppna VBA fönster.

  • Därefter, på den VBA fönstret, gå till Infoga> Modul .

  • Därefter klistrar du in följande kod i modulen:
 Funktion DECISION(string1 As String) Dim Position As Integer Position = InStr(1, string1, "@", 0) If Position = 0 Then DECISION = "Not Email" Else DECISION = "Email" End If End Function 

  • Dessutom har vi skapat en funktion som heter BESLUT Den avgör om en adress är en e-postadress eller inte. Vi tillämpar funktionen på den datamängd vi har.
  • På cell C5 , skriv ned följande formel och fyll sedan automatiskt i resten av cellerna med hjälp av Handtag för fyllning .
= BESLUT(B5)

  • Som vi kan se har vi identifierat varje adress oavsett om det är en e-postadress eller inte.

🎓 Hur fungerar koden?

  • Funktion DECISION(string1 As String)

För det första skapas en funktion som heter BESLUT med ett strängargument som heter sträng1 .

  • Dim Position som heltal

Den deklarerar en heltalsvariabel som heter Position .

  • Position = InStr(1, string1, "@", 0)

Detta tilldelar värdet för Position som utgångspunkt för InStr funktion med argumenten 1, string1, "@" och 0 Kort sagt, detta tilldelar den position i adressen där det finns en "@" .

  • Om position = 0, då beslut = "Inte e-post".

Den tilldelar utgången av BESLUT fungera som "Inte e-post" , om den Position variabeln är 0 det vill säga, det fanns ingen "@" i adressen.

(Kom ihåg att om någon sträng inte hittas inom den givna strängen, kommer InStr funktionen returnerar 0 ).

  • Else DECISION = "Email"

Detta tilldelar utgången av BESLUT fungera som "E-post" om det fanns en "@" i adressen. De adresser där det finns en "@" kategoriseras som E-post , och resten kategoriseras i följande kategorier "Inte e-post" .

Liknande läsningar

  • Hur man använder VBA-funktionen UCASE i Excel (4 exempel)
  • Använd MsgBox-funktionen i Excel VBA (en fullständig vägledning)
  • Hur man använder VBA SPLIT-funktionen i Excel (5 exempel)
  • Använd LCase-funktionen i VBA i Excel (med 4 exempel)
  • Hur man använder Fix-funktionen i Excel VBA (4 exempel)

2. Användning av VBA InStr-funktionen för Extrahera förlängningen av vissa e-postadresser

Här har vi en lista med några kunders e-postadresser. Den här gången kommer vi att extrahera e-postadressens förlängning, t.ex. om de har gmail.com eller . yahoo.com .

Följ stegen nedan för att göra det.

Steg:

  • Till att börja med öppnar du, precis som i den föregående metoden, en ny VBA modulen och klistra in följande kod i fönstret.
 Funktion EXTENSION(Email As String) Dim Position As Integer Position = InStr(1, Email, "@", 0) EXTENSION = Right(Email, (Len(Email) - Position)) End Function 

  • Dessutom har vi skapat en funktion som heter EXTENSION Den extraherar förlängningen av en e-postadress.
  • Låt oss dessutom tillämpa denna funktion på den datamängd vi har. Skriv först in denna formel i cellen C5 och dubbelklicka sedan på Handtag för fyllning .
=EXTENSION(B5)

  • Slutligen kan vi se att vi har lyckats extrahera förlängningen för alla e-postmeddelanden.

🎓 Hur fungerar koden?

  • Funktion EXTENSION(Email As String)

Detta skapar en ny funktion som heter EXTENSION , med ett strängargument som heter E-post .

  • Dim Position som heltal

I denna del deklareras en heltalsvariabel med namnet Position.

  • Position = InStr(1, Email, "@", 0)

Detta tilldelar värdet för Position som utgångspunkt för InStr funktion med argumenten 1, E-post, "@" och 0 Kort sagt, detta innebär att positionen i den E-post där det finns en "@" .

  • EXTENSION = Right(Email, (Len(Email) - Position))

I denna del tilldelas utgången av EXTENSION fungerar som tecknen efter symbolen "@" Detta är den nödvändiga förlängningen av E-post .

3. Extrahera för- eller efternamn från ett namn genom att använda VBA InStr-funktionen

Slutligen ska vi utföra en helt annan uppgift. Den här gången har vi namnen på några anställda på ett företag. Vi ska försöka bygga en funktion för att extrahera antingen förnamnet eller efternamnet på de anställda.

Följ stegen nedan för att göra det.

Steg:

  • För det första, i likhet med Metod 1 klistra in koden nedan i en ny modul i VBA-fönstret.
 Funktion SHORTNAME(Name As String, First_or_Last As Integer) Dim Break As Integer Break = InStr(1, Name, " ", 0) If First_or_Last = -1 Then SHORTNAME = Left(Name, Break - 1) Else SHORTNAME = Right(Name, Len(Name) - Break) End If End Function 

  • Här har vi skapat en funktion som heter KORTNAMN som extraherar antingen förnamnet eller efternamnet från ett namn. Vi tillämpar formeln på vår datamängd.
  • För att först extrahera förnamnet skriver du nedanstående formel i cellen C5 .
=KORTNAMN(B5,-1)

  • För att få fram efternamnen skriver vi slutligen följande formel i D5 :
=KORTNAMN(B5,1)

  • Om vi sedan automatiskt fyller resten av cellerna med Hanterare av fyllning får vi det önskade resultatet.

🎓 Hur fungerar koden?

  • Funktion SHORTNAME(Name As String, First_or_Last As Integer)

Den skapar en ny funktion som heter KORTNAMN med ett String-argument som heter Namn och ett heltalsargument som heter Första_eller_sista .

  • Dim Break som heltal

I denna del deklareras en ny heltalsvariabel som heter Paus .

  • Break = InStr(1, Name, " ", 0)

Den tilldelar värdet för Paus som utgångspunkt för InStr funktion med argumenten 1, Namn, " " och 0 Kort sagt, detta innebär att positionen i den Namn där det finns en mellanslag (" ").

  • Om First_or_Last = -1 Då SHORTNAME = Left(Name, Break - 1)

På denna rad tilldelas utdata från KORTNAMN funktion som de tecken som föregår utrymme , om den Första_eller_sista är -1. Detta är det första namnet.

  • SHORTNAME = Höger(Namn, Len(Namn) - Break)

I denna del tilldelas utgången av KORTNAMN fungerar som tecknen efter utrymme , om den Första_eller_sista argumentet är 1. Detta är det sista namnet.

Slutsats

På detta sätt kan du skriva VBA-koder med hjälp av InStr funktion som tar reda på positionen för en viss sträng i en annan sträng, och sedan kan du skapa egna funktioner för en mängd olika användningsområden. Om du har några frågor är du välkommen att ställa dem till oss.

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.