Excel VBA InStr -funksjon - forklart med eksempler

Innholdsfortegnelse

I går fikk jeg en e -post fra en av leserne mine - juni.

Hun ville vite hvordan hun skal bruke fet skriftformat på en bestemt del av en streng i en celle. Bruk for eksempel fet skrift til bare ordet 'Hello' fra 'Hello World'.

Og hun ville gjøre dette for hundrevis av celler samtidig.

Siden det ikke er noen innebygd funksjonalitet i Excel som kan gjøre det, opprettet jeg en enkel makro som bruker Excel VBA InStr -funksjon (du vil se hvordan du gjør dette i eksempel 4 i denne opplæringen).

Men først, la oss se hvordan Excel VBA InStr -funksjonen fungerer!

Excel VBA InStr -funksjon

I denne opplæringen vil jeg forklare bruken av InStr -funksjonen i Excel VBA og se noen praktiske eksempler der den kan brukes.

Excel VBA InStr -funksjon - introduksjon

InStr -funksjonen finner posisjonen til en spesifisert delstreng i strengen og returnerer den første posisjonen for forekomsten.

For eksempel, hvis du vil finne posisjonen til 'x' i 'Excel', vil bruk av Excel VBA InStr -funksjonen returnere 2.

Syntaks for InStr -funksjon

InStr ([Start], String1, String2, [Sammenlign])
  • [Start] - (valgfritt argument) dette er en heltallsverdi som forteller InStr -funksjonen startposisjonen den skal begynne å se fra. For eksempel, hvis jeg vil at søket skal starte fra begynnelsen, angir jeg verdien som 1. Hvis jeg vil at det skal begynne med det tredje tegnet og fremover, vil jeg bruke 3. Hvis utelatt, blir standardverdien 1 tatt.
  • Streng 1 - Dette er hovedstrengen (eller den overordnede strengen) som du vil søke i. For eksempel, hvis du leter etter posisjonen til x i Excel, vil streng 1 være "Excel".
  • String2 - Dette er delstrengen du søker etter. For eksempel, hvis du leter etter posisjonen til x i Excel, vil String2 være x.
  • [Sammenligne] - (valgfritt argument) Du kan angi én av følgende tre verdier for [sammenligne] argument:
    • vbBinaryCompare - Dette ville gjøre en karakter for karakter sammenligning. For eksempel, hvis du leter etter 'x' i 'Excel', vil den returnere 2, men hvis du leter etter 'X' i 'Excel', vil den returnere 0 slik X er i store bokstaver. Du kan også bruke 0 i stedet for vbBinaryCompare. Hvis [Sammenlign] -argumentet utelates, er dette tatt som standard.
    • vbTextCompare - Dette ville gjøre en tekstlig sammenligning. For eksempel, hvis du ser etter 'x' eller 'X' i Excel, vil det returnere 2 i begge tilfellene. Dette argumentet ignorerer bokstavsaken. Du kan også bruke 1 i stedet for vbTextCompare.
    • vbDatabaseCompare - Dette brukes bare for Microsoft Access. Den bruker informasjonen i databasen for å utføre sammenligningen. Du kan også bruke 2 i stedet for vbDatabaseCompare.

Ytterligere merknader om Excel VBA InStr -funksjon:

  • InStr er en VBA -funksjon og ikke en regnearkfunksjon. Dette betyr at du ikke kan bruke det i regnearket.
  • Hvis String2 (som er delstrengen hvis posisjon du leter etter) er tom, vil funksjonen returnere verdien til [Start] -argumentet.
  • Hvis InStr -funksjonen ikke finner delstrengen i hovedstrengen, vil den returnere 0.

La oss nå se på et eksempel på bruk av Excel VBA InStr -funksjonen

Eksempel 1 - Finne posisjonen fra begynnelsen

I dette eksemplet vil jeg bruke InStr -funksjonen til å finne posisjonen til ‘V’ i ‘Excel VBA’ fra begynnelsen.

Koden for dette vil være:

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

Når du kjører denne koden, vil den vise en meldingsboks med verdien 7, som er posisjonen til ‘V’ i strengen ‘Excel VBA’.

Eksempel 2 - Finne posisjonen fra begynnelsen av det andre ordet

Anta at jeg vil finne posisjonen til ‘the’ i setningen - ‘Den raske brune reven hopper over den late hunden’

Imidlertid vil jeg at søket skal begynne med det andre ordet og fremover.

I dette tilfellet må vi endre [Start] -argumentet for å sikre at det spesifiserer posisjonen der det andre ordet starter.

Her er koden som gjør dette:

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

Denne koden viser meldingsboksen med verdien 32 slik vi har angitt startposisjonen som 4. Derfor ignorerer den den første "The" og finner den andre "the" i setningen.

Hvis du vil gjøre den mer dynamisk, kan du forbedre koden slik at den automatisk ignorerer det første ordet.

Her er den forbedrede koden som gjør dette:

Sub FindFromSecondWord () Dim StartPosition As Integer Dim Position As Integer StartPosition = InStr (1, "Den raske brune reven hopper over den late hunden", "", vbBinaryCompare) Position = InStr (StartPosition, "Den raske brune reven hopper over late dog "," the ", vbBinaryCompare) MsgBox Position End Sub

Denne koden finner først posisjonen til et mellomromstegn og lagrer den i variabelen StartingPosition.

Den bruker deretter denne variabelen som startposisjon for å lete etter ordet 'the'.

Derfor returnerer den 32 (som er startposisjonen til 'the' etter det første ordet).

Eksempel 3 - Finne posisjonen til @ i e -postadressen

Du kan enkelt lage en egendefinert funksjon for å finne posisjonen til @ i en e -postadresse ved hjelp av Excel VBA InStr -funksjonen.

Her er koden for å lage den egendefinerte funksjonen:

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

Nå kan du bruke denne egendefinerte funksjonen som alle andre regnearkfunksjoner. Det vil ta en cellereferanse som input og gi deg posisjonen til @ i den.

På samme måte kan du opprette en egendefinert funksjon for å finne posisjonen til en hvilken som helst delstreng i hovedstrengen.

Eksempel 4 - Fremheving av en del av strengen i celler

Dette er spørringen som ble spurt av June (min leser som også inspirerte meg til å skrive denne opplæringen).

Her er et eksempel på data i formatet June sendte meg:

Spørsmålet hennes var å gjøre tallene utenfor braketten fet.

Her er koden jeg opprettet som gjør dette:

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

Koden ovenfor bruker sløyfen For hver for å gå gjennom hver av cellene i utvalget. Den identifiserer plasseringen til åpningsbraketttegnet ved hjelp av InStr -funksjonen. Den endrer deretter skriften på teksten før parentesen.

For å bruke denne koden må du kopiere og lime inn en modul i VB -editoren.

Når du har kopiert limt inn koden, velger du cellene du vil gjøre denne formateringen i og kjører makroen (som vist nedenfor).

Du kan også like følgende Excel VBA -opplæringsprogrammer:

  • Excel VBA SPLIT -funksjon.
  • VBA TRIM -funksjon.
  • Den ultimate guiden til Excel VBA -løkker.
  • En nybegynnerguide for bruk for neste sløyfe i Excel VBA.
  • Hvordan lage og bruke et Excel-tillegg.
  • Slik kombinerer du flere arbeidsbøker til en Excel -arbeidsbok.
  • Hvordan telle fargede celler i Excel.
  • Nyttige Excel VBA -makroeksempler for nybegynnere.
  • Slik sorterer du data i Excel ved hjelp av VBA (en trinnvis veiledning)

Du vil bidra til utvikling av området, dele siden med vennene dine

wave wave wave wave wave