Sådan finder du en streng med VBA i Excel (8 eksempler)

  • Del Dette
Hugh West

Gennemførelse af VBA er den mest effektive, hurtigste og sikreste metode til at udføre enhver operation i Excel. I denne artikel vil vi vise dig, hvordan du kan finde bestemte strenge i en anden given streng ved hjælp af VBA i Excel.

Download skabelon til praksis

Du kan downloade den gratis Excel-skabelon til øvelser her.

VBA til at finde i String.xlsm

InStr-funktion

Microsoft Excel har en indbygget funktion kaldet InStr-funktionen til at finde placeringen af bestemte strenge i en given String.

Generisk syntaks:

InStr([start], string1, string2, [compare])

Her,

Argumenter Krævet/ valgfri Definition
start Valgfrit Startposition for søgningen.
  • Som standard er InStr funktionen beregner tegnpositionen ved at tælle fra 1 og ikke fra startpositionen. Du kan altså lade dette felt stå tomt, hvis du ønsker det.
string1 Påkrævet Den streng, der skal søges i, primærstreng.
string2 Påkrævet Den streng, der skal søges efter i den primære streng.
sammenlign Valgfrit InStr funktionen er som standard case-sensitiv. Men hvis du ønsker at køre en case-insensitiv InStr , kan du indsætte et argument her for at foretage en bestemt sammenligning. Dette argument kan have følgende værdier,
  • vbBinaryCompare -> udfører en binær sammenligning, returnerer værdien 0
  • vbTextCompare -> udfører en tekstsammenligning, returnerer værdi 1
  • vbDatabaseCompare -> udfører en databasesammenligning, returnerer værdi 2

Som standard, InStr tager vbBinaryCompare som sammenligningsargument.

8 nemme eksempler på at finde en bestemt strengposition i en given streng ved hjælp af VBA

Lad os se nogle enkle eksempler på at få positionerne af visse strenge i en given streng ved hjælp af VBA .

1. VBA til at finde positionen af tekst i en streng

Nedenfor er et eksempel på InStr til at finde positionen af en tekst i en streng.

  • Tryk på Alt + F11 på dit tastatur eller gå til fanen Udvikler -> Visual Basic for at åbne Visual Basic-editor .

  • I pop-up kodevinduet skal du på menulinjen klikke på Indsæt -> Modul .

  • I kodevinduet skal du nu skrive en simpel InStr program i et VBA-underprocedure (se nedenfor).
 Sub INSTR_Example() MsgBox InStr("Lykken er et valg", "valg") End Sub 

Din kode er nu klar til at køre.

  • Tryk på F5 på dit tastatur eller på menulinjen vælge Kør -> Kør Sub/UserForm Du kan også bare klikke på lille Play-ikon i undermenulinjen for at køre makroen.

Du vil se, at du i pop-up-boksen får en meddelelse om tal, der angiver positionen af den tekst, som du vil kontrollere.

Forklaring:

Vores primære streng, " Lykken er et valg " er en sætning på 21 bogstaver (med mellemrum), og vi ønskede at finde placeringen af teksten " valg " i denne streng. Teksten " valg " startede fra den 16. position i den primære streng, og derfor fik vi nummer 16 som vores output i meddelelsesboksen.

2. VBA til at finde tekst fra en bestemt position i en streng

Lad os nu finde ud af, hvad der ville ske, hvis vi ønskede at få positionen fra et bestemt tal.

  • På samme måde som før, åbne Visual Basic-editor fra den Udvikler og Indsæt a Modul i kodevinduet.
  • I kodevinduet skal du skrive en simpel InStr programmet som vist ovenfor, og indsæt værdien i start-argumentet i overensstemmelse med den position, som du vil tælle din tekst fra.
 Sub INSTR_Example() MsgBox InStr(17, "Lykken er et valg", "valg") End Sub 

  • Næste, Kør koden.

Du vil se, at du i pop-up-boksen får en meddelelse om tal, der angiver positionen af teksten ud fra en bestemt position som du ønskede at kontrollere.

Forklaring:

Da vi allerede vidste (fra drøftelserne i fase 1), at teksten " valg " startede fra positionen 16 , så vi indsatte to " valg " i den primære streng og indstille 17 som vores 1. parameter for at springe den første " valg ". Så vi Kør ovenstående makro, og den viste os positionsnummer 27 som er nøjagtig det samme positionsnummer som anden " valg " i den angivne streng.

3. VBA til at finde tekst med Case-insensitive InStr-funktionen i String

Fra indførelsen af den InStr funktion ved du allerede, at som standard er InStr funktionen er strikse og skrivefølsom. Lad os finde ud af det med et eksempel.

Se følgende VBA kode, hvor vi ønskede at finde positionen af ordet " Valg " med en stort "C" i strengen " Lykken er et valg ", hvor valg skrives med et lille "c" .

  • Kør koden og finde 0 som vores output.

Det skyldes, at den InStr funktion behandler stort "C" og lille "c" forskelligt. Så den søgte efter ordet " Valg " i strengen og fik ikke noget match, så den returnerede 0 .

  • For at gøre den InStr funktion skift mellem store og små bogstaver , indstille compare-argumentet til vbTextCompare (se nedenfor).
 Sub INSTR_Example() MsgBox InStr(1, "Lykken er et valg og valg", "Choice", "Choice", vbTextCompare) End Sub 

  • Kør koden.

Du vil få den tekstens placering fra strengen, om teksten er skrevet i store eller små bogstaver .

4. VBA til at finde tekst fra højre i en streng

Indtil nu har den InStr funktionen gav os kun positionen fra venstre side af strengen. Men hvad nu, hvis du vil finde tekstpositionen fra højre side af strengen.

InStrRev-funktionen søger fra højre. InStrRev fungerer på samme måde som funktionen InStr funktion, og den finder dig placeringen af en tekst fra højre side af strengen.

Se de følgende eksempler for at forstå forskellen.

  • Hvis vi kører følgende kode med InStr funktion derefter,

det giver os positionen ( 16 ) af den første tekst " valg ".

  • Men hvis vi kører den samme kode med InStrRev Funktion derefter,

det giver os positionen ( 27 ) af den sidste tekst " valg ".

Lignende læsninger:

  • FindNext ved hjælp af VBA i Excel (2 eksempler)
  • Sådan finder og erstatter du ved hjælp af VBA (11 måder)
  • Find nøjagtig match ved hjælp af VBA i Excel (5 måder)

5. VBA til at finde positionen af et tegn i en streng

Du kan også finde placeringen af et bestemt tegn i en streng på samme måde som du fandt tekst.

  • Kopier følgende kode ind i din VBA kodevindue
 Sub Find_Character() Dim z As Long z = InStr("Lykken er et valg", "e") MsgBox z End Sub 

  • Og Kør makroen.

Den første " e " i vores givne streng er på nummeret 7 stilling.

6. VBA til at finde delstrenge i en streng

Her vil vi lære at finde ud af, om en streng indeholder en understreng eller ej.

For at få det, skal vi køre en IF-erklæring i vores kode.

  • På samme måde som før, åbne Visual Basic-editor fra den Udvikler og Indsæt a Modul i kodevinduet.
  • Kopier følgende kode i kodevinduet, og indsæt den.
 Public Sub FindSub() If InStr("Happiness is a choice", "choice") = 0 Then MsgBox "No match found" Else MsgBox "Match found" End If End Sub End Sub 

Din kode er nu klar til at køre.

  • Kør makroen.

Hvis din streng indeholder understrengen så får du en match fundet , ellers returnerer den ingen match fundet. I vores eksempel ville vi finde ud af, om vores primære streng " Lykken er et valg " indeholder ordet " valg " eller ej. Når det gør det, får vi en Match fundet resultat.

7. VBA til at finde en streng i et celleområde

Du kan søge efter en bestemt tekst i et celleområde med en streng og returnere en bestemt streng.

Se på følgende eksempel, hvor vi finder " Dr. ", og når der er et match, returnerer den " Doktor ".

  • Nedenfor er koden til at opnå det ovenfor beskrevne resultat,
 Sub Find_String_in_Range() Dim cell As Range For Each cell In Range("B5:B10") If InStr(cell.Value, "Dr.")> 0 Then cell.Offset(0, 1).Value = "Doctor" End If Next cell End Sub 

  • Kør koden og resultatet er vist nedenfor

  • Du kan ændre makroen efter dit behov. Hvis du f.eks. ønsker at finde " Prof. " i en hvilken som helst celle i strengen, og få " Professor " som retur, så skal du blot sende " Prof. " som værdi i stedet for " Dr. ." i makroens fjerde linje og " Professor " i stedet for " Doktor " i makroens 5. linje og definer celleintervallets nummer i overensstemmelse hermed.

8. VBA til at finde en streng i en celle

Du kan også søge efter en bestemt tekst i en enkelt celle i en streng og returnerer en bestemt streng.

  • Kopier følgende kode, og indsæt den i kodevinduet.
 Sub Find_String_in_Cell() If InStr(Range("B5").Value, "Dr.")> 0 Then Range("C5").Value = "Doctor" End If End Sub 

Den vil søge efter " Dr. " i Celle B5 og hvis den finder et match, returnerer den " Doktor " i Celle C5 .

  • Du kan ændre makroen efter dit behov. Hvis du f.eks. ønsker at finde " Prof. " i en hvilken som helst celle i strengen, og få " Professor " som retur, så skal du blot sende " Prof. " som værdi i stedet for " Dr. ." i makroens anden linje og " Professor " i stedet for " Doktor " i makroens 3. linje og definer cellereferencenummeret i overensstemmelse hermed.

Konklusion

Denne artikel viste dig, hvordan du kan finde bestemte tekster i en streng i Excel ved hjælp af VBA-makro. Jeg håber, at denne artikel har været til stor gavn for dig, og du er velkommen til at stille spørgsmål om emnet.

Hugh West er en meget erfaren Excel-træner og analytiker med over 10 års erfaring i branchen. Han har en bachelorgrad i regnskab og finans og en kandidatgrad i Business Administration. Hugh har en passion for undervisning og har udviklet en unik undervisningstilgang, der er nem at følge og forstå. Hans ekspertviden om Excel har hjulpet tusindvis af studerende og fagfolk verden over med at forbedre deres færdigheder og udmærke sig i deres karriere. Gennem sin blog deler Hugh sin viden med verden og tilbyder gratis Excel-tutorials og onlinetræning for at hjælpe enkeltpersoner og virksomheder med at nå deres fulde potentiale.