VBA INDEX MATCH na podlagi več meril v Excelu (3 metode)

  • Deliti To
Hugh West

Kadar imamo veliko količino podatkov, je včasih težko iz nabora podatkov izluščiti določene podatke. INDEX in . MATCH funkcije lahko prikličejo vse vrste podatkov, tudi v velikem naboru podatkov. VBA je najučinkovitejša, najhitrejša in najvarnejša metoda za izvedbo katere koli operacije v Excelu. V tem članku vam bomo pokazali 3 različne metode, kako izvesti INDEX MATCH na podlagi več meril v Excelu z Makro VBA .

Prenos delovnega zvezka

Brezplačni delovni zvezek Excel lahko prenesete s tega mesta.

VBA INDEX MATCH na podlagi več meril.xlsm

3 metode z VBA INDEX MATCH na podlagi več meril v Excelu

V naslednjih razdelkih vam bomo pokazali, kako izvesti INDEX MATCH na podlagi več meril za območje , za določen izbor in . za mizo v Excelu z VBA .

Zgoraj imamo nabor podatkov, ki ga bomo uporabili v tem članku. Ime in priimek učenca , Študentska izkaznica, in . Marke na izpitu vsakega učenca v zbirki podatkov. Na podlagi pogojev iz drugih dveh stolpcev bomo izločili določen rezultat, ki se nahaja v enem stolpcu.

Merilo - 1: Vgradnja VBA z INDEX MATCH za več (dvodimenzionalno) iskanje v Excelu

Upoštevajte naslednjo sliko. Shranili smo ime določenega učenca " Robovi" na spletnem mestu Celica G4 ; in stolpec, v katerem bomo iskali Rezultat v, Marke na izpitu , je shranjen v Celica G5 . Iskali bomo v Marke na izpitu stolpec in shranite Marks da " Robovi" vstopil Celica G6 .

Rezultat korakov iskanja je dvodimenzionalno polje s spletno stranjo . INDEX in . MATCH v Excelu z VBA so navedeni v nadaljevanju.

Koraki:

  • Na začetku pritisnite Alt + F11 na tipkovnici ali odprite zavihek Razvijalec -> Visual Basic da odprete Urejevalnik Visual Basic .

  • Nato v pojavnem oknu kode v menijski vrstici kliknite Vstavljanje -> Modul .

  • Nato, kopiranje naslednjo kodo in prilepite v okno za kodo.
 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 

Vaša koda je zdaj pripravljena za zagon.

  • Zdaj pritisnite F5 na tipkovnici ali v menijski vrstici izberite Run -> Run Sub/UserForm Lahko tudi kliknete na majhna ikona Run v podmeniju za zagon makra.

Po izvedbi kode si oglejte spodnji gif in si oglejte rezultat.

Zaradi tega je Marks da " Robovi" dobil na izpitu, 67 , se pridobi v Celica G7 .

Razlaga kode VBA

 Dim iSheet kot delovni list 

Opredelitev spremenljivke delovnega lista.

 Set iLista = Delovni listi("Dve dimenziji") 

Shranite ime delovnega lista. Ime našega lista je "Dve dimenziji", vi pa morate določiti ime v skladu s svojo preglednico.

 i List.Območje("G6").Vrednost = Application.WorksheetFunction.Index(i List.Območje("C5:D14"), Application.WorksheetFunction.Match(i List.Območje("G4"), i List.Območje("B5:B14"), 0), Application.WorksheetFunction.Match(i List.Območje("G5"), i List.Območje("C4:D4"), 0)) 

Ta del kode izbere območje C5:D14 kot območje iskanja. Nato poiščite ujemanje, ki je shranjeno v celici G4 v območju B5:B14 in poiščite ujemanje, ki je shranjeno v celici G5 v območju C4: D4 in rezultat prenesite v celico G6 .

Preberite več: Kako uporabiti INDEX MATCH z več merili za datumsko območje

Merilo - 2: Uporaba makra za iskanje vrednosti MATCH z INDEXOM z uporabniško določeno funkcijo (UDF)

Iz nabora podatkov lahko izluščite ujemajoče se vrednosti z uporabniško opredeljena funkcija (UDF) . Iz naslednje slike je razvidno, kaj bomo naredili, če bomo posredovali Študentska izkaznica in . Marke na izpitu določenega učenca in funkcija nam bo vrgla Ime tega določenega učenca.

Oglejmo si, kako to doseči za Ime učenca "Finn" s spletno stranjo . VBA .

Koraki:

  • Kot je bilo prikazano prej, odprite Urejevalnik Visual Basic iz Razvijalec zavihek in Vstavite a Modul v oknu kode.
  • Nato v oknu kode, kopiranje naslednjo kodo in prilepite ga.
 Funkcija 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 Not found" End Function 

  • Ne teči ta koda, shranite ga.
  • Zdaj, vrnite se na delovni list zanimivo. Izberite katero koli celico kamor želite shraniti rezultat. V našem primeru je to Celica F5 .
  • V tej celici, napišite UDF ki ste ga pravkar ustvarili v kodi ( MatchByIndex ) in posredovati ID študenta in izpitne ocene določenega učenca v oklepaju funkcije.

Ker poskušamo izpisati ime " Finn" iz njegovega ID (105) in . Znamke (84) , zato je v našem primeru formula naslednja,

=MatchByIndex(105,84)

  • Nato pritisnite Vnesite .

Oglejte si naslednjo sliko.

Na spletnem mestu Celica F5 , smo uspešno pridobili ime " Finn" s preprostim prehodom njegovega ID in . Marks znotraj funkcije, ki smo jo ustvarili v VBA koda.

Razlaga kode VBA

 Funkcija MatchByIndex (x kot dvojnik, y kot dvojnik) 

Ustvari novo funkcijo in vanjo posreduje spremenljivke. Funkciji lahko določite poljubno ime.

 Const StartRow = 4 

Naša vrstica se začne v vrstici številka 4. Navesti morate številko vrstice, od katere se začne vaš niz podatkov.

 Dim EndRow As Long Dim iRow As Long 

Opredelitev spremenljivk.

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

Najprej določite delovni list, s katerim boste delali. Ime našega lista je "UDF", ime pa morate določiti v skladu s svojo preglednico. Nato začnite iskati v območju C:D od prve vrstice, ki smo jo določili, do zadnje vrstice.

 Za iRow = StartRow Do EndRow Če .Range("C" & iRow).Value = x In .Range("D" & iRow).Value = y Potem MatchByIndex = .Range("B" & iRow).Value Konec funkcije End If Naslednji iRow Konec z 

Začnite iterirati od prve do zadnje vrstice. Če prva vrednost, ki jo bomo posredovali v funkcijo, pade v polje C in če druga vrednost, ki jo bomo posredovali znotraj funkcije, spada v stolpec D nato vrne ujemanje iz stolpca B V nasprotnem primeru zaključite funkcijo, končajte vse izjave in pojdite na naslednjo vrstico.

 MatchByIndex = "Podatki niso najdeni" Konec funkcije 

Če prejšnji pogoj med izvajanjem ni izpolnjen, se vrne sporočilo "Podatki niso najdeni" in koda zapusti funkcijo.

Preberite več: INDEX-MATCH z več merili za delno besedilo v Excelu (2 načina)

Merilo - 3: Izvajanje VBA za vračanje vrednosti MATCH iz tabele z več podatki v Excelu

V tem razdelku bomo izvedeli, kako vrne ujemajočo se vrednost z indeksi iz tabele v MsgBox na spletnem mestu VBA Excel.

Oglejmo si, kako pridobiti Marks iz tabele, prikazane v našem naboru podatkov ( T sposobno ime: TableMatch ) določenega učenca z zagotavljanjem Ime in ID znotraj kode. V našem primeru je Ime in ID bo Finn in . 105 oziroma.

Koraki:

  • Najprej odprite Urejevalnik Visual Basic iz Razvijalec zavihek in Vstavite a Modul v oknu kode.
  • Nato, kopiranje naslednjo kodo in prilepite v okno za kodo.
 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 MarksColumn As Long 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 Then 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 

Vaša koda je zdaj pripravljena za zagon.

  • Kasneje, Spustite to kodo in si oglejte naslednjo sliko, da vidite, kaj se je zgodilo.

Kot lahko vidite na zgornji sliki, je Microsoft Excel pojavno okno s sporočilom, ki prikazuje Oznake: 84 na spletnem mestu ID: 105 in . Ime: Finn ki smo ga zagotovili v kodi.

Razlaga kode VBA

 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 

Opredelitev spremenljivk.

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

Nastavitev imena lista in imena tabele znotraj spremenljivk.

 TargetID = 105 TargetName = "Finn" IdColumn = iTable.ListColumns("Student ID").Index NameColumn = iTable.ListColumns("Student Name").Index MarksColumn = iTable.ListColumns("Exam Marks").Index 

Shranjevanje vrednosti iskanja in stolpcev iskanja za iskanje.

 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 

Ta del kode pregleda od začetka do konca indeksnega zapisa in če v stolpcih za iskanje najde ujemanje med opredeljenim ID in imenom, shrani rezultat in zapre vse izjave. Prav tako zaključi iteracijo in preide na naslednji del kode.

 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 

Vrže rezultat v okence MsgBox.

Preberite več: Iskanje in vračanje več vrednosti, združenih v eno celico v Excelu

Zaključek

Za zaključek vam je ta članek pokazal 3 različne metode, kako izvesti INDEX MATCH na podlagi več meril v Excelu z Makro VBA Upam, da vam je ta članek zelo koristil. Vabim vas, da zastavite kakršno koli vprašanje v zvezi s to temo.

Hugh West je zelo izkušen trener Excela in analitik z več kot 10-letnimi izkušnjami v industriji. Po izobrazbi je diplomirani računovodstvo in finance ter magisterij poslovne administracije. Hugh ima strast do poučevanja in je razvil edinstven pristop k poučevanju, ki ga je enostavno slediti in razumeti. Njegovo strokovno znanje o Excelu je pomagalo na tisoče študentom in strokovnjakom po vsem svetu, da so izboljšali svoje sposobnosti in se izkazali v karieri. Prek svojega bloga Hugh deli svoje znanje s svetom, ponuja brezplačne vadnice za Excel in spletno usposabljanje, ki posameznikom in podjetjem pomaga doseči njihov polni potencial.