Excel VBA InStr -funktion - forklaret med eksempler

Indholdsfortegnelse

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

Hun ville vide, hvordan man anvender fed skriftformat til en bestemt del af en streng i en celle. Anvend f.eks. Det fede format til kun ordet 'Hello' fra 'Hello World'.

Og hun ville gøre dette for hundredvis af celler på én gang.

Da der ikke er nogen indbygget funktionalitet i Excel, der kan gøre det, oprettede jeg en simpel makro, der bruger Excel VBA InStr -funktion (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!

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 positionen for en specificeret delstreng i strengen og returnerer den første position for dens forekomst.

For eksempel, hvis du vil finde positionen for 'x' i 'Excel', ville brug af Excel VBA InStr -funktionen returnere 2.

Syntaks for InStr -funktion

InStr ([Start], String1, String2, [Sammenlign])
  • [Start] - (valgfrit argument) dette er en heltal værdi, der fortæller InStr -funktionen startpositionen, hvorfra den skal begynde at kigge. For eksempel, hvis jeg vil have søgningen til at starte fra begyndelsen, vil jeg indtaste værdien som 1. Hvis jeg vil have den til at begynde med det tredje tegn og fremefter, vil jeg bruge 3. Hvis den udelades, tages standardværdien på 1.
  • String 1 - Dette er hovedstrengen (eller den overordnede streng), hvor du vil søge. For eksempel, hvis du leder efter positionen x i Excel, ville streng 1 være "Excel".
  • String2 - Dette er den delstreng, du leder efter. For eksempel, hvis du leder efter positionen x i Excel, ville String2 være x.
  • [Sammenligne] - (valgfrit argument) Du kan angive en af ​​følgende tre værdier for [sammenligne] argument:
    • vbBinaryCompare - Dette ville gøre en karakter for karakter sammenligning. For eksempel, hvis du leder efter 'x' i 'Excel', returnerer det 2, men hvis du leder efter 'X' i 'Excel', returnerer det 0, da X er med store bogstaver. Du kan også bruge 0 i stedet for vbBinaryCompare. Hvis [Sammenlign] -argumentet udelades, tages dette som standard.
    • vbTextCompare - Dette ville gøre en tekstlig sammenligning. For eksempel, hvis du leder efter 'x' eller 'X' i Excel, ville det returnere 2 i begge tilfælde. Dette argument ignorerer bogstavsagen. Du kan også bruge 1 i stedet for vbTextCompare.
    • vbDatabaseCompare - Dette bruges kun til Microsoft Access. Den bruger oplysningerne i databasen til 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. Det betyder, at du ikke kan bruge det i regnearket.
  • Hvis String2 (som er delstrengen, hvis position du leder efter) er tom, returnerer funktionen værdien af ​​[Start] -argumentet.
  • Hvis InStr -funktionen ikke kan finde delstrengen i hovedstrengen, returnerer den 0.

Lad os nu se på et eksempel på at bruge Excel VBA InStr -funktionen

Eksempel 1 - Find positionen fra begyndelsen

I dette eksempel vil jeg bruge InStr -funktionen til at finde positionen for 'V' i 'Excel VBA' fra begyndelsen.

Koden til dette ville være:

Sub FindFromBeginning () Dim Position As Integer Position = InStr (1, "Excel VBA", "V", vbBinaryCompare) MsgBox Position End 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, at jeg vil finde placeringen af ​​'the' i sætningen - 'Den hurtige brune ræv springer over den dovne hund'

Jeg vil dog have, at søgningen skal begynde med det andet ord og frem.

I dette tilfælde skal vi ændre [Start] -argumentet for at sikre, at det angiver den position, hvorfra det andet ord starter.

Her er koden, der gør dette:

Sub FindFromSecondWord () Dim Position As Integer Position = InStr (4, "Den hurtige brune ræv springer over den dovne hund", "the", vbBinaryCompare) MsgBox Position End Sub

Denne kode viser meddelelsesboksen med værdien 32, da vi har angivet startpositionen som 4. Derfor ignoreres den første 'The' og finder den anden 'the' i sætningen.

Hvis du vil gøre den 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 StartPosition Som Heltal Dim Position As Integer StartPosition = InStr (1, "Den hurtige brune ræv springer over den dovne hund", "", vbBinaryCompare) Position = InStr (StartPosition, "Den hurtige brune ræv springer over doven hund "," the ", vbBinaryCompare) MsgBox Position End Sub

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

Den bruger derefter denne variabel som udgangsposition til at lede efter ordet 'the'.

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

Eksempel 3 - Find placering af @ i e -mail -adresse

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

Her er koden til at oprette den tilpassede funktion:

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

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

På samme måde kan du oprette en brugerdefineret funktion for at finde placeringen af ​​enhver delstreng i hovedstrengen.

Eksempel 4 - Fremhævning af en del af strengen inden for celler

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

Her er et eksempel på data i det format, juni sendte mig:

Hendes forespørgsel var at gøre tallene uden for beslaget fede.

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

Sub fed () Dim rCell som Range Dim Char As Integer For hver rCell i markering CharCount = Len (rCell) Char = InStr (1, rCell, "(") rCell.Characters (1, Char - 1) .Font.Bold = True Next rCell End Sub

Ovenstående kode bruger For Every loop til at gå gennem hver af cellerne i markeringen. Det identificerer placeringen af ​​åbningsbeslagets tegn ved hjælp af InStr -funktionen. Det ændrer derefter tekstens skrifttype før parentesen.

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

Når du har kopieret klistret koden, skal du markere de celler, hvor du vil lave denne formatering, og køre makroen (som vist nedenfor).

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

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

Du vil bidrage til udviklingen af ​​hjemmesiden, at dele siden med dine venner

wave wave wave wave wave