Obsah
Keď máme veľké množstvo údajov, potom je niekedy ťažké extrahovať zo súboru údajov konkrétne údaje. Spolu s programom Excel INDEX a MATCH funkcie môžu získať akýkoľvek druh údajov aj v obrovskom súbore údajov. VBA je najefektívnejšia, najrýchlejšia a najbezpečnejšia metóda na spustenie akejkoľvek operácie v programe Excel. V tomto článku vám ukážeme 3 rôzne metódy, ako vykonať INDEX MATCH na základe viacerých kritérií v programe Excel pomocou Makro VBA .
Stiahnite si pracovný zošit
Bezplatný cvičný zošit Excel si môžete stiahnuť odtiaľto.
VBA INDEX MATCH na základe viacerých kritérií.xlsm3 metódy s VBA INDEX MATCH na základe viacerých kritérií v programe Excel
V nasledujúcich častiach vám ukážeme, ako vykonať INDEX MATCH na základe viacerých kritérií pre rozsah , pre konkrétny výber a pre tabuľku v programe Excel pomocou VBA .
Vyššie máme súbor údajov, ktorý bude nasledovať v tomto článku. Meno študenta , ID študenta, a Známky zo skúšky každého študenta v súbore údajov. Na základe podmienok z ostatných dvoch stĺpcov získame určitý výsledok nachádzajúci sa v jednom stĺpci.
Kritérium - 1: Vloženie VBA s INDEX MATCH pre viacnásobné (dvojrozmerné) vyhľadávanie v programe Excel
Zoberme si nasledujúci obrázok. Uložili sme meno konkrétneho študenta " Hrana" na stránke Bunka G4 ; a stĺpec, v ktorom budeme vyhľadávať Výsledok v, Známky zo skúšky , je uložený v Bunka G5 Budeme hľadať v Známky zo skúšky stĺpec a uložiť Značky že " Hrana" dostal sa do Bunka G6 .
Výsledkom krokov vyhľadávania je dvojrozmerné pole s INDEX a MATCH v programe Excel pomocou VBA sú uvedené nižšie.
Kroky:
- Na začiatku stlačte Alt + F11 na klávesnici alebo prejdite na kartu Vývojár -> Visual Basic otvoriť Editor jazyka Visual Basic .
- Potom vo vyskakovacom okne kódu kliknite na paneli ponúk na položku Vložiť -> Modul .
- Potom, kopírovať nasledujúci kód a vložte do okna kódu.
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
Váš kód je teraz pripravený na spustenie.
- Teraz stlačte F5 na klávesnici alebo na paneli ponúk vyberte Run -> Run Sub/UserForm Môžete tiež jednoducho kliknúť na malá ikona Run na paneli podmenu, aby ste makro spustili.
Po vykonaní kódu sa pozrite na nasledujúci gif, aby ste videli výsledok.
V dôsledku toho sa Značky že " Hrana" dostal na skúške, 67 , sa vyhľadáva v Bunka G7 .
Vysvetlenie kódu VBA
Dim iSheet Ako pracovný hárok
Definovanie premennej pracovného hárku.
Set iSheet = Worksheets("Two Dimension")
Uložte názov pracovného hárka. Názov nášho hárka je "Dva rozmery", mali by ste uviesť názov podľa vašej tabuľky.
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))
Táto časť kódu vyberie rozsah C5:D14 ako rozsah vyhľadávania. Potom vyhľadajte zhodu, ktorá je uložená v bunke G4 v dosahu B5:B14 a vyhľadajte zhodu, ktorá je uložená v bunke G5 v dosahu C4:D4 a odovzdajte výsledok bunke G6 .
Prečítajte si viac: Ako používať INDEX MATCH s viacerými kritériami pre rozsah dátumov
Kritérium - 2: Použitie makra na nájdenie hodnoty MATCH pomocou INDEXU s funkciou definovanou používateľom (UDF)
Z množiny údajov môžete získať zhodné hodnoty pomocou používateľom definovaná funkcia (UDF) Z nasledujúceho obrázka vyplýva, že budeme odovzdávať ID študenta a Známky zo skúšky určitého študenta a funkcia nám vyhodí Názov konkrétneho študenta.
Pozrime sa, ako to dosiahnuť pre Meno študenta "Finn" s VBA .
Kroky:
- Ako už bolo uvedené, otvorte Editor jazyka Visual Basic z Vývojár karta a Vložte a Modul v okne kódu.
- Potom v okne kódu, kopírovať nasledujúci kód a vložte to.
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 Not found" End Function
- Neutekajte tento kód, uložiť to.
- Teraz, vrátiť sa na pracovný hárok záujmu. Vyberte ľubovoľnú bunku do ktorého chcete uložiť výsledok. V našom prípade je to Bunka F5 .
- V tejto bunke, napísať UDF ktoré ste práve vytvorili v kóde ( MatchByIndex ) a odovzdať ID študenta a známky zo skúšky konkrétneho študenta v zátvorkách funkcie.
Keďže sa pokúšame extrahovať názov " Finn" z jeho ID (105) a Známky (84) , takže v našom prípade vzorec znie,
=MatchByIndex(105,84)
- Potom stlačte tlačidlo Vstúpte na stránku .
Pozrite sa na nasledujúci obrázok.
Na stránke Bunka F5 , úspešne sme získali názov " Finn" jednoduchým odovzdaním jeho ID a Značky vo vnútri funkcie, ktorú sme vytvorili v VBA kód.
Vysvetlenie kódu VBA
Funkcia MatchByIndex(x As Double, y As Double)
Vytvorenie novej funkcie a odovzdanie premenných v jej vnútri. Funkcii môžete definovať ľubovoľný názov.
Const StartRow = 4
Náš riadok začína od riadku číslo 4. Musíte uviesť číslo riadku, od ktorého začína váš súbor údajov.
Dim EndRow As Long Dim iRow As Long
Definovanie premenných.
With Worksheets("UDF") EndRow = .Range("C:D").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Najprv definujte pracovný hárok, s ktorým chcete pracovať. Názov nášho hárku je "UDF", mali by ste uviesť názov podľa vašej tabuľky. Potom začnite vyhľadávať v rozsahu C:D od prvého riadku, ktorý sme definovali, po posledný riadok.
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
Začnite iterovať od prvého po posledný riadok. Ak prvá hodnota, ktorú odovzdáme vo vnútri funkcie, spadá do C a ak druhá hodnota, ktorú odovzdáme vo vnútri funkcie, spadá do stĺpca D potom vráti zhodu zo stĺpca B V opačnom prípade ukončite funkciu, ukončite všetky príkazy a prejdite na ďalší riadok.
MatchByIndex = "Údaje neboli nájdené" Koniec funkcie
Ak sa predchádzajúca podmienka pri vykonávaní nesplní, vráti sa správa "Data Not Found" a kód opustí funkciu.
Prečítajte si viac: INDEX-MATCH s viacerými kritériami pre čiastočný text v programe Excel (2 spôsoby)
Kritérium - 3: Implementácia VBA na vrátenie hodnoty MATCH z tabuľky s viacerými údajmi v programe Excel
V tejto časti sa dozvieme, ako vrátenie porovnanej hodnoty podľa indexov z tabuľky v MsgBox na stránke VBA Excel.
Pozrime sa, ako extrahovať Značky z tabuľky uvedenej v našom súbore údajov ( T schopný názov: TableMatch ) určitého študenta poskytnutím Názov a ID vnútri kódu. V našom prípade Názov a ID bude Finn a 105 resp.
Kroky:
- Po prvé, otvorte Editor jazyka Visual Basic z Vývojár karta a Vložte a Modul v okne kódu.
- Potom, kopírovať nasledujúci kód a vložte do okna kódu.
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 =iheet.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
Váš kód je teraz pripravený na spustenie.
- Neskôr, Spustiť tento kód a pozrite sa na nasledujúci obrázok, aby ste videli, čo sa stalo ako výsledok.
Ako vidíte na obrázku vyššie, je tu Microsoft Excel vyskakovacie okno so správou, v ktorej sa zobrazí Známky: 84 z ID: 105 a Názov: Finn ktoré sme poskytli vo vnútri kódu.
Vysvetlenie kódu 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
Definovanie premenných.
Set iBook = Application.ThisWorkbook Set iSheet = iBook.Sheets("Return Result") Set iTable = iSheet.ListObjects("TableMatch")
Nastavenie názvu listu a názvu tabuľky v premenných.
TargetID = 105 TargetName = "Finn" IdColumn = iTable.ListColumns("Student ID").Index NameColumn = iTable.ListColumns("Student Name").Index MarksColumn = iTable.ListColumns("Exam Marks").Index
Uloženie hodnôt vyhľadávania a stĺpcov vyhľadávania na vyhľadávanie.
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
Táto časť kódu prehľadáva od začiatku po koniec subskripcie a ak nájde zhodu definovaného ID a Name v stĺpcoch vyhľadávania, potom uloží výsledok a uzavrie všetky príkazy. Taktiež ukončí iteráciu a prejde na ďalšiu časť kódu.
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
Vyhodí výsledok do okna MsgBox.
Prečítajte si viac: Vyhľadávanie a vrátenie viacerých hodnôt spojených do jednej bunky v programe Excel
Záver
Na záver vám tento článok ukázal 3 rôzne metódy, ako vykonať INDEX MATCH na základe viacerých kritérií v programe Excel pomocou Makro VBA . dúfam, že tento článok bol pre vás veľmi prínosný. Neváhajte a položte akékoľvek otázky týkajúce sa tejto témy.