VBA INDEX MATCH baseret på flere kriterier i Excel (3 metoder)

  • Del Dette
Hugh West

Når vi har en stor mængde data, er det nogle gange svært at udtrække specifikke data fra datasættet. Sammen med Excel's INDEX og MATCH funktioner kan hente alle slags data, selv i et stort datasæt. Implementering 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 3 forskellige metoder til at udføre INDEX MATCH baseret på flere kriterier i Excel med VBA-makro .

Download arbejdsbog

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

VBA INDEX MATCH baseret på flere kriterier.xlsm

3 Metoder med VBA INDEX MATCH baseret på flere kriterier i Excel

I de følgende afsnit vil vi vise dig, hvordan du udfører INDEX MATCH baseret på flere kriterier for et område , for et specifikt valg og for et bord i Excel med VBA .

Ovenfor har vi det datasæt, som denne artikel vil følge. Vi har den Navn på den studerende , Elev-ID, og Karakterer til eksamen Vi vil udtrække et bestemt resultat, der befinder sig i den ene kolonne, på grundlag af betingelserne i de to andre kolonner.

Kriterier - 1: Indlejring af VBA med INDEX MATCH til flere (to) dimensionelle opslag i Excel

Se følgende billede: Vi har gemt en bestemt elevs navn " Edge" Celle G4 ; og den kolonne, som vi vil søge i Resultat i, Karakterer til eksamen , er gemt i Celle G5 . Vi vil søge i den Karakterer til eksamen kolonne og gemme den Marks at " Edge" kom ind Celle G6 .

Trinene til opslag resulterer i en todimensionalt array med INDEX og MATCH i Excel med VBA er angivet nedenfor.

Trin:

  • I begyndelsen skal du trykke på Alt + F11 på dit tastatur eller gå til fanen Udvikler -> Visual Basic for at åbne Visual Basic-editor .

  • Klik derefter i pop-up kodevinduet på menulinjen på Indsæt -> Modul .

  • Derefter, kopi følgende kode og indsætte det i kodevinduet.
 Sub IndexMatchStudent() Dim iSheet As Worksheet Set iSheet = Worksheets("Two Dimension") iSheet.Range("G6").Value = Application.WorksheetFunction.Index(iSheet.Range("C5:D14"), Application.WorksheetFunction.Match(iSheet.Range("G4"), iSheet.Range("B5:B14"), 0)), Application.WorksheetFunction.Match(iSheet.Range("G5"), iSheet.Range("C4:D4"), 0))) End Sub 

Din kode er nu klar til at køre.

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

Efter udførelsen af koden kan du se resultatet i nedenstående gif-film.

Som følge heraf har Marks at " Edge" fik i eksamen, 67 , hentes i Celle G7 .

Forklaring af VBA-kode

 Dim iSheet As Worksheet 

Definition af variablen i regnearket.

 Set iSheet = Worksheets("Two Dimension") 

Gem navnet på regnearket. Navnet på vores ark er "Two Dimension", men du skal angive navnet i overensstemmelse med dit regneark.

 iSheet.Range("G6").Value = Application.WorksheetFunction.Index(iSheet.Range("C5:D14"), Application.WorksheetFunction.Match(iSheet.Range("G4"), iSheet.Range("B5:B14"), 0), Application.WorksheetFunction.Match(iSheet.Range("G5"), iSheet.Range("C4:D4"), 0))) 

Dette stykke kode vælger området C5:D14 som opslagsinterval. Søg derefter efter det match, der er gemt i celle G4 i rækkevidde B5:B14 og søge efter det match, der er gemt i celle G5 i rækkevidde C4:D4 og sender resultatet til celle G6 .

Læs mere: Sådan bruges INDEX MATCH med flere kriterier for datointerval

Kriterier - 2: Anvend makro til at finde MATCH-værdi ved INDEX med brugerdefineret funktion (UDF)

Du kan udtrække matchede værdier fra et datasæt med en brugerdefineret funktion (UDF) Fra det følgende billede vil vi gøre følgende: Vi vil sende Elev-ID og Karakterer til eksamen af en bestemt elev, og funktionen vil give os den Navn for den pågældende elev.

Lad os se, hvordan du kan opnå dette for Elevens navn "Finn" med VBA .

Trin:

  • Som tidligere vist kan åbne Visual Basic-editor fra den Udvikler og Indsæt a Modul i kodevinduet.
  • Derefter i kodevinduet, kopi følgende kode og indsætte det.
 Function MatchByIndex(x As Double, y As Double) Const StartRow = 4 Dim EndRow As Long Dim iRow As Long With Worksheets("UDF") EndRow = .Range("C:D").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row For iRow = StartRow To EndRow If .Range("C" & iRow).Value = x And .Range("D" & iRow).Value = y ThenMatchByIndex = .Range("B" & iRow).Value Exit Function End If Next iRow End With MatchByIndex = "Data ikke fundet" End Function 

  • Lad være med at løbe denne kode, redde det.
  • Nu, gå tilbage til regnearket af interesse. Vælg en vilkårlig celle som du ønsker at gemme resultatet i. I vores tilfælde er det Celle F5 .
  • I denne celle, skrive den UDF du lige har oprettet i koden ( MatchByIndex ) og videregive elev-id og eksamenskarakterer for den specifikke elev inden for funktionens parentes.

Da vi forsøger at udtrække navnet " Finn" fra hans ID (105) og Mærker (84) , så i vores tilfælde bliver formlen,

=MatchByIndex(105,84)

  • Derefter skal du trykke på Indtast .

Se på følgende billede.

Celle F5 , vi har med succes hentet navnet " Finn" ved blot at videregive sin ID og Marks inde i den funktion, som vi har oprettet i VBA kode.

Forklaring af VBA-kode

 Funktion MatchByIndex(x As Double, y As Double) 

Oprettelse af en ny funktion og indsættelse af variablerne i den. Du kan definere et vilkårligt navn til funktionen.

 Const StartRow = 4 

Vores række starter fra række nr. 4. Du skal angive det rækkenummer, som dit datasæt starter fra.

 Dim EndRow As Long Dim iRow As Long 

Definition af variablerne.

 Med regneark("UDF") EndRow = .Range("C:D").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 

Først skal du definere det regneark, der skal arbejdes med. Navnet på vores ark er "UDF", du bør angive navnet i overensstemmelse med dit regneark. Begynd derefter at søge i området C:D fra den første række, som vi har defineret, til den sidste række.

 For iRow = StartRow To EndRow If .Range("C" & iRow).Value = x And .Range("D" & iRow).Value = y Then MatchByIndex = .Range("B" & iRow).Value Exit Function End If Next iRow End With 

Begynd at iterere fra den første række til den sidste række. Hvis den første værdi, som vi sender ind i funktionen, falder inden for C kolonnen, og hvis den anden værdi, som vi vil sende i funktionen, falder inden for kolonnen D kolonnen, så vil den returnere det match fra B Ellers afsluttes funktionen, alle udsagn afsluttes, og du går til næste linje.

 MatchByIndex = "Data ikke fundet" End Function 

Hvis den foregående betingelse ikke er opfyldt under udførelsen, returneres meddelelsen "Data ikke fundet", og koden forlader funktionen.

Læs mere: INDEX-MATCH med flere kriterier for delvis tekst i Excel (2 måder)

Kriterier - 3: Implementer VBA til at returnere MATCH-værdi fra en tabel med flere data i Excel

I dette afsnit lærer vi, hvordan man returnerer en matchet værdi ved hjælp af indeksene fra en tabel i MsgBox VBA Excel.

Lad os se, hvordan du udtrækker den Marks fra den tabel, der er vist i vores datasæt ( T kan Navn: TableMatch ) for en bestemt elev ved at give den Navn og ID inde i koden. I vores tilfælde er det Navn og ID vil være Finn og 105 henholdsvis.

Trin:

  • For det første skal du åbne Visual Basic-editor fra den Udvikler og Indsæt a Modul i kodevinduet.
  • Derefter, kopi følgende kode og indsætte det i kodevinduet.
 Sub ReturnMatchedResultByIndex() Dim iBook As Workbook Dim iSheet As Worksheet Dim iTable As Object Dim iValue As Variant Dim TargetName As String Dim TargetID As Long Dim IdColumn As Long Dim NameColumn As Long Dim NameColumn As Long Dim MarksColumn As Long Dim Dim iCount As Long Dim iResult As Boolean Set iBook = Application.ThisWorkbook Set iSheet = iBook.Sheets("Return Result") Set iTable =iSheet.ListObjects("TableMatch") TargetID = 105 TargetName = "Finn" IdColumn = iTable.ListColumns("Student ID").Index NameColumn = iTable.ListColumns("Student Name").Index MarksColumn = iTable.ListColumns("Exam Marks").Index iValue = iTable.DataBodyRange.Value For iCount = 1 To UBound(iValue) If iValue(iCount, IdColumn) = TargetID Then If iValue(iCount, NameColumn) =TargetName Så iResult = True End If End If If iResult Then Exit For Next iCount If iResult Then MsgBox "ID: " & TargetID & vbLf & "Name: " & TargetName & vbLf & "Marks: " & iValue(iCount, MarksColumn) Else MsgBox "ID: " & TargetID & vbLf & "Name: " & TargetName & vbLf & "Marks Not found" End If End Sub 

Din kode er nu klar til at køre.

  • Senere, Kør denne kode og se på det følgende billede for at se, hvad der skete som resultat.

Som du kan se på ovenstående billede, er der en Microsoft Excel pop-up-meddelelsesboks, der viser dig den Karakterer: 84 ID: 105 og Navn: Finn som vi har angivet i koden.

Forklaring af VBA-kode

 Dim iBook As Workbook Dim iSheet As Worksheet Dim iTable As Object Dim iValue As Variant Dim TargetName As String Dim TargetID As Long Dim IdColumn As Long Dim NameColumn As Long Dim MarksColumn As Long Dim iCount As Long Dim iResult As Boolean 

Definition af variablerne.

 Set iBook = Application.ThisWorkbook Set iSheet = iBook.Sheets("Return Result") Set iTable = iSheet.ListObjects("TableMatch") 

Indstilling af arknavnet og tabellens navn i variabler.

 TargetID = 105 TargetName = "Finn" IdKolonne = iTable.ListColumns("Student ID").Index NameKolonne = iTable.ListColumns("Student Name").Index MarksKolonne = iTable.ListColumns("Exam Marks").Index 

Lagring af opslagsværdierne og de opslagsspalte, der skal søges i.

 iValue = iTable.DataBodyRange.Value For iCount = 1 To UBound(iValue) If iValue(iCount, IdColumn) = TargetID Then If iValue(iCount, NameColumn) = TargetName Then iResult = True End If End If If iResult Then Exit For Next iCount 

Denne kode scanner fra starten til slutningen af subscriptet, og hvis den finder et match mellem det definerede ID og navnet i søgespalterne, lagres resultatet, og alle udsagn lukkes. Iterationen afsluttes også, og du går til den næste del af koden.

 If iResult Then MsgBox "ID: " & TargetID & vbLf & "Name: " & TargetName & vbLf & "Marks: " & iValue(iCount, MarksColumn) Else MsgBox "ID: " & TargetID & vbLf & "Name: " & TargetName & vbLf & "Marks Not found" End If 

Kaster resultatet i msgBoxen.

Læs mere: Opslag og returnering af flere værdier sammenkædet i én celle i Excel

Konklusion

Afslutningsvis har denne artikel vist dig 3 forskellige metoder til at udføre INDEX MATCH baseret på flere kriterier i Excel med 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.