Hur man hittar delsträngar med VBA (9 sätt)

  • Dela Detta
Hugh West

Om du letar efter några av de enklaste sätten att hitta delsträngar med hjälp av VBA är du på rätt plats. Efter att ha gått igenom den här artikeln kommer du att kunna hitta positionen för en delsträng eller extrahera data med hjälp av denna delsträng eller ändra formatet för en delsträng på ett enkelt sätt. Låt oss gå in i artikeln.

Ladda ner arbetsboken

Exempel på innehåll

9 sätt att hitta delsträngar med VBA

Här har jag följande datatabell där jag kommer att visa hur man kan hitta delsträngar i en sträng med hjälp av VBA. Jag kommer också att försöka visa hur man kan hitta delsträngar i en slumpmässig sträng.

Jag har utfört denna uppgift med hjälp av Microsoft Excel 365 versionen, men du kan använda vilken annan version som helst om det passar dig.

Metod-1: Hitta delsträngar i en sträng med hjälp av VBA

Om du vill hitta den önskade delsträngen i en sträng med hjälp av VBA kan du använda InStr-funktionen i VBA-koden.

Step-01 :

➤Gå till Utvecklare Fliken>> Visual Basic Alternativ

Därefter är det Redigerare för Visual Basic kommer att öppnas.

➤Gå till Infoga Fliken>> Modul Alternativ

Efter detta kommer en Modul kommer att skapas.

Step-02 :

➤Skriv följande kod

 Sub FindFirst() Dim Pos As Integer Pos = InStr(1, "Jag tror att jag är", "tror") MsgBox Pos End Sub 

Här, InStr(1, "Jag tror, därför är jag", "tror") returnerar positionen för delsträngen i en sträng. 1 är startpositionen, " Jag tänker, därför är jag" är den sträng där du hittar den önskade delsträngen, och "tänka" är den delsträng som du vill söka efter. Som standard är den skiftlägeskänslig, så var uppmärksam på skiftläget i den delsträng som du vill söka efter.

➤Press F5

Resultat :

Därefter får du följande Meddelandebox som innehåller positionen för "tänka" delsträng.

Metod-2: Hitta en delsträng i en sträng som är känslig för stora och små bokstäver

Om du vill hitta den önskade delsträngen i en sträng oberoende av fallet med hjälp av VBA kan du följa den här metoden.

Step-01 :

➤Följ Step-01 Metod-1

 Public Sub caseinsensitive() Dim Pos As Integer Pos = InStr(1, "I Think Therefore I Am", "think",vbTextCompare) MsgBox Pos End Sub 

Här, vbTextCompare används för att hitta en delsträng som inte tar hänsyn till stor- och småbokstäver.

➤Press F5

Resultat :

Därefter får du följande Meddelandebox som innehåller positionen för "tänka" delsträng.

Du kan göra samma sak genom att använda följande kod.

 Alternativ Jämför text Public Sub caseinsensitive() Dim Pos As Integer Pos = InStr(1, "I Think Therefore I Am", "think") MsgBox Pos End Sub 

Här, Alternativ Jämför text kommer att hitta en delsträng som inte tar hänsyn till stor- och små bokstäver.

➤Press F5

Resultat :

Därefter får du följande Meddelandebox som innehåller positionen för "tänka" delsträng.

Metod-3: Använda InstrRev-funktionen i VBA

Här ska jag visa hur man hittar en delsträng från slutet av en sträng.

Step-01 :

➤Följ Step-01 Metod-1

 Sub FindFromEnd() MsgBox InStrRev("Jag tror, därför är jag", "Jag") End Sub 

InStrRev hittar delsträngen från höger sida i stället för från vänster sida.

➤Press F5

Resultat :

Därefter får du följande Meddelandebox som innehåller positionen för den andra "I" delsträng från den högra sidan.

Metod-4: Hitta positionen för en delsträng i en sträng i ett datavärde

Om du vill hitta specialtecknet "@" i den E-postadress , följ då denna metod. Jag har lagt till här Positionskolumn för detta ändamål.

Step-01 :

➤Följ Step-01 Metod-1

 Funktion FindSubstring(value As Range) As Integer Dim Pos As Integer Pos = InStr(1, value, "@") FindSubstring = Pos Slutfunktion 

Den skapar en funktion som heter FindSubstring (du kan använda vilket annat namn som helst)

värde är cellreferensen som innehåller strängen och den deklareras som Utbud .

Step-02 :

➤Välja utgång Cell E5

➤ Skriv följande funktion (skapad av VBA )

=FindSubstring(D5)

D5 är den cell som innehåller strängen.

➤Press ENTER

➤ Dra ner Handtag för fyllning Verktyg

Resultat :

Därefter får du positionerna för specialtecknet " @" i den E-postadress .

Liknande läsningar:

  • Hur man hittar strängar i en cell med VBA i Excel (2 metoder)
  • FindNext med VBA i Excel (2 exempel)
  • Hur man hittar strängar med VBA i Excel (8 exempel)
  • VBA Hitta sista raden i Excel (5 sätt)

Metod-5: Kontrollera en viss delsträng i en sträng i ett dataområde

Antag att du vill skriva Passa eller . Underlåtenhet att svara till elevernas namn beroende på vilken typ av Resultatkolumn där Passa eller . Fail har skrivits inom en parentes. För att hitta denna delsträng i Resultatkolumn och skriv ner den i Kolumn för godkänt eller underkänt följa denna metod.

Step-01 :

➤Följ Step-01 Metod-1

 Sub CheckSubstring() Dim cell As Range For Each cell In Range("C5:C10") If InStr(cell.value, "Pass")> 0 Then cell.Offset(0, 1).value = "Passed" Else cell.Offset(0, 1).value = "Failed" End If Next cell End Sub 

Här är cellintervallet C5:C10 som är den Resultatkolumn

InStr(cell.value, "Pass")> 0 är det tillstånd där talet är större än noll (när cellen innehåller "Pass" ) så fortsätter följande rad och ger resultatet i den intilliggande cellen som Godkänd .

Om villkoret blir falskt betyder det att en cell inte innehåller någon "Pass" då raden under Annat kommer att utföras och ge utdatavärdet i den intilliggande cellen som Misslyckad .

Denna slinga fortsätter för varje cell.

➤Press F5

Resultat :

Då får du följande utdata i Godkänd eller underkänd kolumn.

Metod-6: Kontrollera en viss delsträng i en sträng och extrahera data

Jag ska visa hur man hittar de elever som har fått sitt namn. Michael i den Kolumnen Elevnamn och extrahera motsvarande uppgifter med hjälp av VBA med denna metod.

Step-01 :

➤Följ Step-01 Metod-1

 Sub Extractdata() Dim lastusedrow As Long Dim i As Integer, icount As Integer lastusedrow = ActiveSheet.Range("B100").End(xlUp).Row For i = 1 To lastusedrow If InStr(1, Range("B" & i), "Michael")> 0 Then icount = icount + 1 Range("E" & icount & ":G" & icount) = Range("B" & i & ":D" & i).value End If Next i End Sub 

Här har jag använt mig av B100 som Aktivt bladområde men du kan använda vilket intervall som helst beroende på vad du vill.

InStr(1, Range("B" & i), "Michael")> 0 är villkoret för att kontrollera om cellen i kolumnen B innehåller Michael

Range("E" & icount & ":G" & icount) är det område där du vill ha dina utdata och Range("B" & i & ":D" & i).value kommer att ge värdena från kolumnerna B till D .

➤Press F5

Resultat :

Efter det får du följande extraherade data för de elever som har namnet Michael .

Metod-7: Sökning av delsträngar för ord

Om du vill hitta delsträngen som ett ord följer du den här metoden.

Step-01 :

➤Följ Step-01 Metod-1

 Sub Stringforword() Dim j As Integer j = InStr("Här är vad jag är", "är") If j = 0 Then MsgBox "Ordet har inte hittats" Else MsgBox "Ordet har hittats i position: " & j End If End Sub 

Den kontrollerar om strängen innehåller är och därefter ges dess position

➤Press F5

Resultat :

Därefter får du följande meddelanderuta som visar följande ord som finns i position:6 (den position som är ).

Du kan testa denna kod för ett ord som inte finns i strängen.

➤ Skriv följande kod

 Sub Stringforword() Dim j As Integer j = InStr("Här är vad jag är", "är") If j = 0 Then MsgBox "Ordet har inte hittats" Else MsgBox "Ordet har hittats i position: " & j End If End Sub 

➤Press F5

Resultat :

Därefter får du följande meddelanderuta som visar följande Ordet har inte hittats. .

Metod-8: Använda funktionerna Instr och LEFT

Här kommer jag att förklara hur man hittar positionen för en delsträng i en sträng och hur man extraherar texterna före denna delsträng med hjälp av VBA och den vänstra funktionen .

Step-01 :

➤Följ Step-01 Metod-1

 Sub InstrandLeft() Dim txt As String Dim j As Long txt = "Här är vad jag är" j = InStr(txt, "is") MsgBox Left(txt, j - 1) End Sub 

j = InStr(txt, "is") är positionen för delsträngen är och Vänster(txt, j - 1) kommer att extrahera delsträngarna före är .

➤Press F5

Resultat :

Därefter får du följande meddelande i rutan som visar Här (delsträng före är ).

Metod-9: Bolding en viss delsträng i en sträng

Du kan fetstila betygen före parenteser i Resultatkolumn genom att följa den här metoden.

Step-01 :

➤Följ Step-01 Metod-1

 Sub Boldingsubstring() Dim Cell As Range Dim txt As Integer For Each Cell In Selection txtCount = Len(Cell) txt = InStr(1, Cell, "(") Cell.Characters(1, txt - 1).Font.Bold = True Next Cell End Sub 

txt = InStr(1, Cell, "(") returnerar positionen för den första parentesen och Cell.Characters(1, txt - 1).Font.Bold kommer att göra delsträngen före den första parentesen till Fet .

Step-02 :

➤Välj den Resultatkolumn

➤Gå till Utvecklare Fliken>> Makroer Alternativ

Därefter kan en Makro kommer att visas.

➤ Välj Fetstilar och understrängar (VBA-kodnamnet) och sedan Kör .

Resultat :

Efter det kommer betygen i de Resultat Kolumn kommer att vara fetstilad.

Övningssektionen

För att du ska kunna öva på egen hand har vi tillhandahållit en Praktik som nedan i ett ark som heter Praktik . Gör det själv.

Slutsats

I den här artikeln har jag försökt täcka de enklaste sätten att hitta delsträngar med hjälp av VBA i Excel på ett effektivt sätt. Jag hoppas att du kommer att tycka att den är användbar. Om du har några förslag eller frågor, är du välkommen att dela med dig av 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.