Sådan finder du nøjagtig match ved hjælp af VBA i Excel (5 måder)

  • Del Dette
Hugh West

Hvis du er på udkig efter nogle af de nemmeste måder at finde et nøjagtigt match på ved hjælp af VBA så vil du finde denne artikel nyttig. Så lad os komme i gang med artiklen og lære, hvordan du kan finde et nøjagtigt match.

Download arbejdsbog

VBA Find nøjagtig match.xlsm

5 måder at finde nøjagtig match på ved hjælp af VBA

Jeg har brugt følgende tabel, som indeholder nogle elevers resultater. Jeg vil forklare forskellige måder at finde det nøjagtige match på ved hjælp af denne tabel ved hjælp af VBA.

Til dette formål har jeg brugt Microsoft Excel 365-versionen, men du kan også bruge andre versioner, hvis det passer dig.

Metode-1: Finde nøjagtig match i en række celler

Hvis du vil finde et nøjagtigt match af en streng som f.eks. navnet på en elev og derefter finde denne elevs celleposition, kan du gøre dette ved at følge denne metode.

Her vil jeg finde et nøjagtigt match for den elev, der hedder "Joseph Micahel" .

Step-01 :

➤Gå til Udvikler Tab>> Visual Basic Mulighed

Derefter er det Visual Basic-editor vil åbne sig.

➤Gå til Indsæt Tab>> Modul Mulighed

Herefter skal en Modul vil blive oprettet.

Step-02 :

➤Skriv følgende kode

 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 

Her, "nøjagtig match" er navnet på arket og "B5:B10" er rækken af elevernes navne, og "Joseph Michael" er den studerendes navn, som skal findes.

rng er angivet som et intervalobjekt og str som en strengvariabel til at gemme adressen på det søgte emne.

IF vil tildele elementets adresse til str variabel.

➤Presse F5

Resultat :

Herefter får du følgende Meddelelsesboks som indeholder cellens position for den elev, der hedder "Joseph Michael" .

Læs mere: Find i et område med VBA i Excel: Inklusive nøjagtige og delvise matchninger

Metode-2: Finde nøjagtig match og erstatte den ved hjælp af VBA

Jeg vil vise, hvordan man finder den angivne elevs navn og derefter erstatter det med et andet navn, fordi dette navn ved en fejl er blevet skrevet her. Du kan find den ønskede streng og erstat den ved at følge denne metode.

Step-01 :

➤Follow Step-01 Metode-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 If End With End Sub 

Her, "find&erstatte" er navnet på arket og "B5:B10" er rækken af elevernes navne, og "Donald Paul" er den studerendes navn, som skal findes frem, og derefter "Henry Jackson" vil være den studerendes navn i stedet for det tidligere.

MED vil man undgå at gentage koden i hver enkelt erklæring.

IF vil tildele elementets adresse til str variabel og den DO løkken vil erstatte alle forekomster af søgeordet.

➤Presse F5

Resultat :

Herefter får du den nye elevs navn som "Henry Jackson" .

Metode-3: Finde nøjagtig og case-sensitiv match

Hvis du ønsker at finde et match, der tager hensyn til store og små bogstaver, skal du følge denne metode. Her har jeg to navne, der ligner hinanden, men der er forskel på store og små bogstaver, og afhængig af dette vil jeg erstatte den sidste elevs navn.

Step-01 :

➤Follow Step-01 Metode-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 If End With EndUnder 

Her, "skivene-sensitiv" er navnet på arket og "B5:B10" er rækken af elevernes navne, og "Donald Paul" er den studerendes navn, som skal findes frem, og derefter "Henry Jackson" vil være den studerendes navn i stedet for det tidligere.

MED vil man undgå at gentage koden i hver enkelt erklæring.

IF vil tildele elementets adresse til str variabel og den DO løkken vil erstatte alle forekomster af søgeordet.

➤Presse F5

Resultat :

Nu vil den studerendes navn ifølge sagen blive ændret til "Henry Jackson" .

Lignende læsninger:

  • Sådan finder du String i en celle ved hjælp af VBA i Excel (2 metoder)
  • VBA Find i kolonne i Excel (7 fremgangsmåder)
  • Sådan finder du en streng med VBA i Excel (8 eksempler)

Metode-4: Brug af InStr-funktionen

Antag, at du ønsker at matche Pass eller Undlader at svare til navnene på de studerende afhængigt af den Resultat kolonne hvor Pass eller Fail er blevet skrevet. For at finde denne streng i Resultat kolonne og skrive ned "Bestået" i den Statuskolonne for de studerende, der har bestået eksamen, kan du bruge InStr-funktionen .

Step-01 :

➤Follow Step-01 Metode-1

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

Her er celleområdet C5:C10 som er den Resultat kolonne

InStr(cell. value, "Pass")> 0 er den tilstand, hvor tallet er større end nul (når cellen indeholder "Bestået" ), vil den følgende linje fortsætte og give resultatet i den tilstødende celle som Bestået .

Hvis betingelsen bliver falsk, betyder det, at en celle ikke indeholder nogen "Bestået" så er linjen under ELSE vil blive udført og give outputværdien i den tilstødende celle som Blank .

Denne løkke fortsætter for hver celle.

➤Presse F5

Resultat :

Derefter får du den "Bestået" status for de studerende, der har bestået.

Metode-5: Finde nøjagtig match og udtrække data

Hvis du ønsker at udtrække de tilsvarende data for en elev ved navn "Michael James" så kan du følge denne metode.

Step-01 :

➤Follow Step-01 Metode-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 & i & ":D" & i).Value End If Next i End Sub 

Her har jeg brugt B100 som den Aktivt arkområde (du kan bruge et hvilket som helst interval, alt efter hvad du bruger).

InStr(1, Range("B" & i), "Michael James")> 0 er betingelsen for at kontrollere, om cellen i kolonne B indeholder Michael James .

Range("E" & icount & ":G" & icount) er det område, hvor du vil have dine uddata, og Range("B" & i & ":D" & i).value vil give værdierne fra kolonnen B til D .

➤Presse F5

Resultat :

Herefter får du følgende udtrækkede data for de elever, der har navnet Michael James .

Øvelsesafsnit

For at du kan øve dig selv, har vi givet dig en Praksis afsnit som nedenfor i et ark med navnet Praksis . gør det venligst selv.

Konklusion

I denne artikel har jeg forsøgt at beskrive de letteste måder at finde et nøjagtigt match på ved hjælp af VBA i Excel effektivt. Jeg håber, at du vil finde det nyttigt. Hvis du har forslag eller spørgsmål, er du velkommen til at dele dem med os.

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.