Tartalomjegyzék
Ha nagy mennyiségű adatunk van, akkor néha nehéz bármilyen konkrét adatot kivenni az adathalmazból. Az Excel programmal együtt a INDEX és MATCH függvények segítségével bármilyen adatot lekérdezhetünk, akár egy hatalmas adathalmazban is. A VBA a leghatékonyabb, leggyorsabb és legbiztonságosabb módszer bármilyen művelet futtatására az Excelben. Ebben a cikkben 3 különböző módszert mutatunk be arra, hogy hogyan végezze el a INDEX MATCH több kritérium alapján Excelben a VBA makró .
Munkafüzet letöltése
Az ingyenes gyakorló Excel munkafüzetet innen töltheti le.
VBA INDEX MATCH több kritérium alapján.xlsm3 módszer a VBA INDEX MATCH több kritérium alapján az Excel-ben
A következő szakaszokban megmutatjuk, hogyan végezze el a következő műveleteket INDEX MATCH több kritérium alapján egy tartományra vonatkozóan , egy adott kiválasztáshoz és egy táblázat esetében Excelben a VBA .
Fentebb van az adatkészlet, amelyet ez a cikk követni fog. Megvan a Diák neve , Diákigazolvány, és Vizsgajegyek Az egyik oszlopban található eredményt a másik két oszlop feltételei alapján fogjuk kivenni.
Kritériumok - 1: VBA beágyazása INDEX MATCH-val több (két) dimenziós kereséshez az Excelben
Tekintsük a következő képet. Egy adott diák nevét tároltuk el " Edge" a oldalon. Cell G4 ; és az oszlop, amelyben keresni fogunk a Eredmény in, Vizsgajegyek , tárolja a Cell G5 . Megkeressük a Vizsgajegyek oszlopot, és tárolja a Márkok hogy " Edge" bejutott Cell G6 .
A keresés lépéseinek eredménye egy kétdimenziós tömb a címen INDEX és MATCH Excelben a VBA az alábbiakban adjuk meg.
Lépések:
- Az elején nyomja meg a Alt + F11 a billentyűzeten, vagy lépjen a Fejlesztő -> Visual Basic kinyitni Visual Basic szerkesztő .
- Ezután a felugró kódablakban a menüsoron kattintson a Beszúrás -> Modul .
- Akkor, másolat a következő kódot és paste a kódablakba.
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
A kódod most már futtatásra kész.
- Most nyomja meg a F5 a billentyűzeten, vagy válassza a menüsorból a Futtatás -> Sub/UserForm futtatása . Egyszerűen csak kattints a kis Futtatás ikon az almenüsorban a makró futtatásához.
A kód végrehajtása után nézd meg az alábbi gif-et, hogy lásd az eredményt.
Ennek eredményeképpen a Márkok hogy " Edge" a vizsgán, 67 , lekérdezzük a G7-es cella .
VBA kód magyarázat
Dim iSheet As Worksheet
A munkalap változójának meghatározása.
Set iSheet = Munkalapok("Két dimenzió")
Tárolja a munkalap nevét. A mi munkalapunk neve "Két dimenzió", Önnek a táblázatának megfelelő nevet kell megadnia.
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)))
Ez a kódrészlet kiválasztja a tartományt C5:D14 mint keresési tartomány. Ezután keresse meg a cellában tárolt egyezést. G4 hatótávolságon belül B5:B14 és keresse meg a cellában tárolt egyezést. G5 hatótávolságon belül C4:D4 és adja át az eredményt a cellának G6 .
Bővebben: INDEX MATCH használata több kritériummal dátumtartományhoz
Kritériumok - 2: Makró alkalmazása a MATCH érték INDEX alapján történő keresésére a felhasználó által definiált függvénnyel (UDF)
Az illeszkedő értékeket egy adathalmazból egy felhasználó által definiált függvény (UDF) A következő képen azt fogjuk csinálni, hogy átadjuk a Diákigazolvány és Vizsgajegyek egy bizonyos diák, és a függvény dob nekünk a Név az adott diákról.
Lássuk, hogyan lehet ezt elérni a Diák neve "Finn" a címen VBA .
Lépések:
- Amint az korábban látható volt, a nyitott Visual Basic szerkesztő a Fejlesztő lap és Beillesztés a Modul a kódablakban.
- Ezután a kódablakban, másolat a következő kódot és paste azt.
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
- Ne fusson! ez a kód, mentse azt.
- Most, visszamegy a munkalaphoz érdeklődésre tarthat számot. Válassza ki bármelyik cellát hogy az eredményt tárolni akarja. Esetünkben ez a F5 cella .
- Abban a cellában, írja meg a UDF amit az imént létrehozott a kódban ( MatchByIndex ) és adja át a diákigazolványt és a vizsgaeredményeket az adott diáknak a függvény zárójelében.
Mivel megpróbáljuk kivonni a nevet " Finn" az ő ID (105) és Márkák (84) , így esetünkben a képlet a következő lesz,
=MatchByIndex(105,84)
- Ezután nyomja meg a Írja be a címet. .
Nézze meg a következő képet.
A oldalon. F5 cella , sikeresen lekérdeztük a nevet " Finn" azáltal, hogy egyszerűen átadja a ID és Márkok a függvényen belül, amit a VBA kód.
VBA kód magyarázat
Function MatchByIndex(x As Double, y As Double)
Egy új függvény létrehozása és a változók átadása benne. A függvénynek tetszőleges nevet adhat.
Const StartRow = 4
A mi sorunk a 4. sorszámmal kezdődik. Meg kell adnia azt a sorszámot, amellyel az adatállománya kezdődik.
Dim EndRow As Long Dim iRow As Long
A változók meghatározása.
With Worksheets("UDF") EndRow = .Range("C:D").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Először is határozzuk meg a munkalapot, amellyel dolgozni szeretnénk. A mi lapunk neve "UDF", az Ön táblázatkezelőjének megfelelő nevet kell megadnia. Ezután kezdjük el a keresést a tartományban. C:D az első sortól, amelyet definiáltunk, az utolsó sorig.
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
Kezdjük el az iterálást az első sortól az utolsó sorig. Ha az első érték, amelyet a függvényen belül átadunk, a C oszlopban, és ha a második érték, amit a függvényen belül átadunk, a D oszlopban, akkor visszaadja az egyezést a B oszlop. Ellenkező esetben lépjen ki a függvényből, fejezze be az összes utasítást, és lépjen a következő sorba.
MatchByIndex = "Data Not found" End Function
Ha az előző feltétel nem teljesül a végrehajtás során, akkor az "Data Not Found" üzenet érkezik vissza, és a kód elhagyja a funkciót.
Bővebben: INDEX-MATCH több kritériummal a részleges szöveghez az Excelben (2 módja)
Kritériumok - 3: VBA végrehajtása a MATCH-érték visszaadása egy táblázatból több adatot tartalmazó táblázatból az Excelben
Ebben a szakaszban megtanuljuk, hogyan kell az MsgBox-ban egy táblázatban lévő indexek által egybevetett értéket ad vissza. a oldalon. VBA Excel.
Lássuk, hogyan lehet kivonni a Márkok az adatállományunkban szereplő táblázatból ( T képes név: TableMatch ) egy bizonyos diáknak a Név és a ID A mi esetünkben a Név és a ID lesz Finn és 105 illetve.
Lépések:
- Először is, nyissa ki Visual Basic szerkesztő a Fejlesztő lap és Beillesztés a Modul a kódablakban.
- Akkor, másolat a következő kódot és paste a kódablakba.
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 End Sub
A kódja most már futtatásra kész.
- Később, Fuss ezt a kódot, és nézze meg a következő képet, hogy lássa, mi történt az eredményként.
Amint a fenti képen látható, van egy Microsoft Excel felugró üzenőmezőben megjelenik a Jegyek: 84 a ID: 105 és Név: Finn amit a kódon belül adtunk meg.
VBA kód magyarázat
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
A változók meghatározása.
Set iBook = Application.ThisWorkbook Set iSheet = iBook.Sheets("Return Result") Set iTable = iSheet.ListObjects("TableMatch")
A lap és a táblázat nevének beállítása változókon belül.
TargetID = 105 TargetName = "Finn" IdColumn = iTable.ListColumns("Student ID").Index NameColumn = iTable.ListColumns("Student Name").Index MarksColumn = iTable.ListColumns("Exam Marks").Index
A keresési értékek és a keresendő keresési oszlopok tárolása.
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 Ha iResult Then Exit For Next iCount
Ez a kódrészlet az alábírás elejétől a végéig végigfut, és ha megtalálja a keresési oszlopokban a meghatározott azonosító és a név egyezését, akkor tárolja az eredményt, és lezárja az összes utasítást. Emellett lépjen ki az iterációból, és lépjen a kód következő részéhez.
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
Az eredményt az MsgBoxba dobja.
Bővebben: Több érték keresése és visszaadása egy cellába fűzve egy Excel-cellában
Következtetés
Összefoglalva, ez a cikk 3 különböző módszert mutatott meg, hogyan kell elvégezni a következő feladatokat INDEX MATCH több kritérium alapján Excelben a VBA makró . remélem, hogy ez a cikk nagyon hasznos volt az Ön számára. Nyugodtan tegye fel kérdéseit a témával kapcsolatban.