Excel VBA InStr-funktion – forklaret med eksempler

I går fik jeg en e-mail fra en af mine læsere – juni.

Hun ville gerne vide, hvordan man anvender fed skriftformat til en bestemt del af en streng i en celle. Anvend for eksempel det fede format på kun ordet ‘Hej’ fra ‘Hej Verden’.

Og hun ville gøre dette i hundreder af celler på én gang.

Da der er ingen indbygget funktionalitet i Excel, der kan gøre det, jeg oprettede en simpel makro, der bruger Excel VBA InStr-funktionen (du vil se, hvordan du gør dette i eksempel 4 i denne vejledning).

Men lad os først se hvordan Excel VBA InStr-funktionen fungerer!

Denne vejledning dækker:

Excel VBA InStr-funktion

I denne vejledning vil jeg forklare brugen af InStr-funktionen i Excel VBA og se nogle praktiske eksempler, hvor den kan bruges.

Excel VBA InStr-funktion – Introduktion

InStr-funktion finder placeringen af en specificeret understreng i strengen og returnerer den første position for dens forekomst.

Hvis du f.eks. vil finde placeringen af ‘x’ i ‘Excel’ ved hjælp af Excel VBA InStr-funktionen ville returnere 2.

Syntaks for InStr-funktion

  • – (valgfrit argument) dette er en heltalsværdi, der fortæller InStr-funktionen, hvilken startposition den skal begynde at kigge fra. For eksempel, hvis jeg ønsker, at søgningen skal starte fra starten, vil jeg indtaste værdien som 1. Hvis jeg vil have den til at begynde med det tredje tegn fremad, bruger jeg 3. Hvis udeladt, tages standardværdien 1.
  • Streng1 – Dette er hovedstrengen (eller den overordnede streng), som du vil søge i. For eksempel, hvis du leder efter placeringen af x i Excel, ville streng 1 være “Excel”.
  • String2 – Dette er det substring, du søger efter. Hvis du f.eks. på udkig efter placeringen af x i Excel, ville String2 være x.
  • – (valgfrit argument) Du kan angive en af følgende tre værdier for argumentet:
    • vbBinaryCompare – Dette ville gøre et tegn ved sammenligning af tegn. Hvis du f.eks. leder efter ‘x’ i ‘Excel’, returnerer den 2, men hvis du leder efter ‘X’ i ‘Excel’, returnerer den 0, da X er i øverste Du kan også bruge 0 i stedet for vbBinaryCompare. Hvis argumentet udelades, er dette taget som standard.
    • vbTextCompare – Dette ville gøre en tekstlig sammenligning. For eksempel, hvis du ser efter ‘x’ eller ‘X’ i Excel, ville det returnere 2 i begge tilfælde. Dette argument ignorerer bogstavet. Du kan også bruge 1 i stedet for vbTextCompare.
    • vbDatabaseCompare – Dette bruges kun til Microsoft Access. Det bruger oplysningerne i databasen for at udføre sammenligningen. Du kan også bruge 2 i stedet for vbDatabaseCompare.

Yderligere bemærkninger om Excel VBA InStr-funktion:

  • InStr er en VBA funktion og ikke en regnearksfunktion. Dette betyder, at du ikke kan bruge det i regnearket.
  • Hvis String2 (som er den understreng, hvis position du leder efter) er tom, returnerer funktionen værdien af argumentet.
  • Hvis InStr-funktionen ikke kan finde understrengen i hovedstrengen, ville den returnere 0.

Lad os nu se på et eksempel på brug af Excel VBA InStr-funktion

Eksempel 1 – Find positionen fra starten

I dette eksempel vil jeg bruge InStr-funktionen til at finde placeringen af ‘V’ i ‘Excel VBA’ fra starten.

Koden til dette ville være:

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

Når du kører denne kode, viser den en meddelelsesboks med værdien 7, som er placeringen af ‘V’ i strengen ‘Excel VBA’.

Eksempel 2 – Find positionen fra begyndelsen af det andet ord

Antag, jeg vil finde positionen af ‘den’ i sætningen – ‘Den hurtige brune ræv springer over den dovne hund’

Jeg ønsker dog, at søgningen skal begynder med det andet ord fremad.

I dette tilfælde er vi nødt til at ændre argumentet for at sikre, at det angiver placeringen, hvorfra det andet ord starter.

Her er koden, som gør dette:

Sub FindFromSecondWord()Dim Position As IntegerPosition = InStr(4, "The quick brown fox jumps over the lazy dog", "the", vbBinaryCompare)MsgBox PositionEnd Sub

Denne kode viser meddelelsesfeltet med værdien 32, da vi har angivet startpositionen som 4. Derfor ignorerer den første ‘ ‘Og finder det andet’ det ‘i sætningen.

Hvis du vil gøre det mere dynamisk, kan du forbedre koden, så den automatisk ignorerer det første ord.

Her er den forbedrede kode, der gør dette:

Sub FindFromSecondWord()Dim StartingPosition As IntegerDim Position As IntegerStartingPosition = InStr(1, "The quick brown fox jumps over the lazy dog", " ", vbBinaryCompare)Position = InStr(StartingPosition, "The quick brown fox jumps over the lazy dog", "the", vbBinaryCompare)MsgBox PositionEnd Sub

Denne kode finder først placeringen af et mellemrumstegn og gemmer den i variablen StartingPosition.

Den bruger derefter denne variabel som startposition til at lede efter ordet ‘the’.

Derfor returnerer den 32 (som er startpositionen for ‘the’ efter det første ord).

Eksempel 3 – Find positionen af @ i e-mail-adresse

Du kan nemt oprette en brugerdefineret funktion til at finde placeringen af @ i en e-mail-adresse ved hjælp af Excel VBA InStr-funktionen.

Her er koden til oprettelse af den brugerdefinerede funktion:

Nu kan du bruge denne brugerdefinerede funktion som enhver anden regnearksfunktion. Det vil tage en cellehenvisning som input og give dig placeringen af @ i den.

På samme måde kan du oprette en brugerdefineret funktion til at finde placeringen af en hvilken som helst understreng inden for hovedstrengen.

Eksempel 4 – Fremhævning af en del af streng inden for celler

Dette er forespørgslen, der blev spurgt af juni (min læser der også inspirerede mig til at skrive denne vejledning).

Her er et eksempel på data i formatet juni sendte mig:

Hendes forespørgsel var at gøre tallene uden for parentesen fed.

Her er den kode, jeg oprettede, der gør dette:

Ovenstående kode bruger For Hver løkke til gå gennem hver af cellerne i markeringen. Det identificerer placeringen af åbningskonsoltegnet ved hjælp af InStr-funktionen. Derefter ændres skrifttypen for teksten før parentes.

For at bruge denne kode skal du kopiere og indsætte et modul i VB-editoren.

Når du har indsat en kopi koden, vælg de celler, som du vil gøre denne formatering i, og kør makroen (som vist nedenfor).

Du kan også lide følgende Excel VBA-vejledninger:

  • Excel VBA SPLIT-funktion.
  • VBA TRIM-funktion.
  • Den ultimative guide til Excel VBA-sløjfer .
  • En begyndervejledning til brug til næste løkke i Excel VBA.
  • Sådan oprettes og bruges et Excel-tilføjelsesprogram.
  • Sådan kombineres flere projektmapper i en Excel-projektmappe.
  • Sådan tælles farvede celler i Excel.
  • Nyttige Excel VBA-makroeksempler til begyndere.
  • Sådan sorteres data i Excel ved hjælp af VBA (En trinvis vejledning)

Leave a Reply

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *