Hitta exakt matchning med VBA i Excel (5 sätt)

  • Dela Detta
Hugh West

Om du letar efter några av de enklaste sätten att hitta en exakt matchning med hjälp av VBA Om du har en bra idé, kommer du att tycka att den här artikeln är användbar. Så låt oss börja med artikeln och lära känna hur man hittar en exakt matchning.

Ladda ner arbetsboken

VBA Hitta exakt matchning.xlsm

5 sätt att hitta exakt matchning med VBA

Jag har använt följande tabell som innehåller några elevers resultat. Jag kommer att förklara olika sätt att hitta en exakt matchning med hjälp av denna tabell och med hjälp av VBA.

I detta syfte har jag använt Microsoft Excel 365-versionen, men du kan använda andra versioner om du vill.

Metod-1: Hitta exakt matchning i en rad celler

Om du vill hitta en exakt matchning av en sträng, t.ex. namnet på en elev, och sedan hitta cellpositionen för den här eleven kan du göra detta genom att följa den här metoden.

Här ska jag hitta en exakt matchning för eleven som heter "Joseph Micahel" .

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 searchtxt() Dim rng As Range Dim str As String Set rng = Sheets("exact match").Range("B5:B10").Find("Joseph Michael", LookIn:=xlValues) If Not rng Is Nothing Then str = rng.Address MsgBox (rng & " in " & str) End If End Sub 

Här, "exakt matchning" är arkets namn och "B5:B10" är intervallet för elevernas namn, och "Joseph Michael" är den studerandes namn som ska tas fram.

rng deklareras som ett intervallobjekt och str som en strängvariabel för att lagra adressen till det sökta objektet.

IF kommer att tilldela objektets adress till str variabel.

➤Press F5

Resultat :

Därefter får du följande Meddelandebox som innehåller cellpositionen för den elev som heter "Joseph Michael" .

Läs mer: Hitta inom ett intervall med VBA i Excel: inkludera exakta och partiella matchningar

Metod-2: Hitta exakt matchning och ersätta den med hjälp av VBA

Jag kommer att visa hur man hittar den angivna elevens namn och sedan ersätter det med ett annat namn, eftersom detta namn på något sätt felaktigt har skrivits här. Du kan hitta den önskade strängen och ersätta den genom att följa den här metoden.

Step-01 :

➤Följ Step-01 Metod-1

 Sub FindandReplace() Dim rng As Range Dim str As String With Worksheets("find&replace").Range("B5:B10") Set rng = .Find("Donald Paul", LookIn:=xlValues) If Not rng Is Nothing Then str = rng.Address Do rng.Value = Replace(rng.Value, "Donald Paul", "Henry Jackson") Set rng = .FindNext(rng) Loop While Not rng Is Nothing End If End With End Sub 

Här, "hitta&ersätta" är arkets namn och "B5:B10" är intervallet för elevernas namn, och "Donald Paul" är studentens namn som ska tas fram och sedan "Henry Jackson" kommer att vara elevens namn i stället för det tidigare namnet.

MED undviker att koden upprepas i varje yttrande.

IF kommer att tilldela objektets adress till str variabeln och den DO kommer att ersätta alla förekomster av sökordet.

➤Press F5

Resultat :

Därefter får du den nya elevens namn som "Henry Jackson" .

Metod-3: Hitta exakta och skiftlägeskänsliga matchningar

Om du vill hitta en matchning som tar hänsyn till stor- och små bokstäver följer du den här metoden. Här har jag två namn som liknar varandra, men det finns en skillnad i stor- och småbokstäverna, och beroende på stor- och småbokstäverna kommer jag att ersätta den sista studentens namn.

Step-01 :

➤Följ Step-01 Metod-1

 Sub exactmatch() Dim rng As Range Dim str As String With Worksheets("case-sensitive").Range("B5:B10") Set rng = .Find("Donald Paul", LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True) If Not rng Is Nothing Then str = rng.Address Do rng.Value = Replace(rng.Value, "Donald Paul", "Henry Jackson") Set rng = .FindNext(rng) Loop While Not rng Is Nothing End If End End With EndUnder 

Här, "skiftlägeskänslig" är arkets namn och "B5:B10" är intervallet för elevernas namn, och "Donald Paul" är den studerandes namn som ska tas fram, och sedan "Henry Jackson" kommer att vara elevens namn i stället för det tidigare namnet.

MED undviker att koden upprepas i varje yttrande.

IF kommer att tilldela objektets adress till str variabeln och den DO kommer att ersätta alla förekomster av sökordet.

➤Press F5

Resultat :

Enligt fallet kommer elevens namn att ändras till "Henry Jackson" .

Liknande läsningar:

  • Hur man hittar strängar i en cell med VBA i Excel (2 metoder)
  • VBA Hitta i kolumnen i Excel (7 metoder)
  • Hur man hittar strängar med VBA i Excel (8 exempel)

Metod-4: Använda InStr-funktionen

Antag att du vill matcha Passa eller . Underlåtenhet att svara till elevernas namn beroende på vilken typ av Resultatkolumn där Passa eller . Fail har skrivits. För att hitta denna sträng i Resultatkolumn och skriva ner "Godkänd" i den Statuskolumn för de elever som har klarat provet, kan du använda InStr-funktionen .

Step-01 :

➤Följ Step-01 Metod-1

 Sub Checkstring() 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 = " " 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 ELSE kommer att utföras och ge utdatavärdet i den intilliggande cellen som Blank .

Denna slinga fortsätter för varje cell.

➤Press F5

Resultat :

Därefter får du "Godkänd" status för de studerande som har klarat sig.

Metod-5: Hitta exakt matchning och extrahera data

Om du vill extrahera motsvarande data för en elev som heter "Michael James" kan du följa den här metoden.

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 James")> 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 (du kan använda vilket intervall som helst beroende på vad du använder).

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

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 kolumnen B till D .

➤Press F5

Resultat :

Därefter får du följande extraherade data för de elever som har namnet Michael James .

Ö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 att beskriva de enklaste sätten att hitta en exakt matchning 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.