Sisukord
Kui meil on suur hulk andmeid, siis on mõnikord raske eraldada andmestikust mingeid konkreetseid andmeid. Koos Exceli INDEX ja MATCH funktsioonidega saab välja otsida mis tahes andmeid isegi suures andmekogumis. Rakendades VBA on kõige tõhusam, kiirem ja turvalisem meetod mis tahes toimingu teostamiseks Excelis. Selles artiklis näitame teile 3 erinevat meetodit, kuidas teostada INDEX MATCH mitme kriteeriumi alusel Excelis koos VBA makro .
Lae alla töövihik
Tasuta Exceli harjutusvihiku saate alla laadida siit.
VBA INDEX MATCH mitme kriteeriumi alusel.xlsm3 meetodit VBA INDEX MATCHi abil, mis põhineb mitmel kriteeriumil Excelis
Järgmistes jaotistes näitame teile, kuidas teostada INDEX MATCH mitme kriteeriumi alusel vahemiku jaoks , konkreetse valiku jaoks ja tabeli jaoks Excelis koos VBA .
Eespool on meil andmestik, mida see artikkel järgib. Meil on olemas Õpilase nimi , Õpilase ID, ja Eksamimärgid iga õpilase kohta andmekogumis. Ekstraheerime ühes veerus asuva teatud tulemuse kahe teise veeru tingimuste alusel.
Kriteeriumid - 1: Embed VBA koos INDEX MATCH mitme (kahe) mõõtme otsinguga Excelis
Vaatleme järgmist pilti. Oleme salvestanud konkreetse õpilase nime " Edge" aadressil Cell G4 ; ja veerg, mida me otsime Tulemus in, Eksamimärgid , on salvestatud Cell G5 Me otsime Eksamimärgid veergu ja salvestada Marks et " Edge" sai sisse Cell G6 .
Sammud otsingu tulemuseks on kahemõõtmeline massiivi koos INDEX ja MATCH Excelis koos VBA on esitatud allpool.
Sammud:
- Alguses vajutage Alt + F11 klaviatuuril või mine vahekaardile Arendaja -> Visual Basic avada Visual Basic toimetaja .
- Seejärel klõpsake hüpikakna koodiaknas menüüribal nuppu Insert -> Moodul .
- Siis, koopia järgmine kood ja paste see koodiaknasse.
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
Teie kood on nüüd valmis käivitamiseks.
- Nüüd vajutage F5 klaviatuuril või valige menüüribalt Run -> Run Sub/UserFormi käivitamine Võite ka lihtsalt klõpsata väike Run ikoon allmenüüribal makro käivitamiseks.
Pärast koodi täitmist vaadake allolevat gif'i, et näha tulemust.
Selle tulemusena on Marks et " Edge" sai eksamil, 67 , on välja otsitud Lahter G7 .
VBA koodi selgitus
Dim iSheet As Worksheet
Töölehe muutuja määratlemine.
Set iSheet = Worksheets("Two Dimension")
Salvesta töölehe nimi. Meie lehe nimi on "Two Dimension", sa peaksid andma oma töölehe nime vastavalt oma arvutustabelile.
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)))
See koodiosa valib vahemiku C5:D14 kui otsinguväli. Seejärel otsi vastavust, mis on salvestatud lahtrisse G4 vahemikus B5:B14 ja otsime vastet, mis on salvestatud lahtrisse G5 vahemikus C4:D4 ja edastab tulemuse lahtrisse G6 .
Loe edasi: Kuidas kasutada INDEX MATCH-i mitme kriteeriumiga kuupäevavahemiku jaoks
Kriteeriumid - 2: Rakenda makro, et leida MATCH väärtus INDEXi abil kasutaja määratud funktsiooniga (UDF)
Andmekogumist saab sobitatud väärtusi välja võtta koos kasutaja määratud funktsioon (UDF) Järgmise pildi põhjal, mida me teeme, on, et me anname üle Õpilase ID ja Eksamimärgid teatud õpilase ja funktsioon viskab meile välja Nimi selle konkreetse õpilase kohta.
Vaatame, kuidas seda saavutada Õpilase nimi "Finn" koos VBA .
Sammud:
- Nagu eespool näidatud, avatud Visual Basic toimetaja alates Arendaja vahekaart ja Sisesta a Moodul koodiaknas.
- Seejärel koodiaknas, koopia järgmine kood ja paste seda.
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 = "Andmeid ei leitud" End Function
- Ära jookse see kood, Salvesta seda.
- Nüüd, minna tagasi töölehe juurde huvi. Valige ükskõik milline lahter mida soovite tulemuse salvestada. Meie puhul on see Lahter F5 .
- Selles lahtris, kirjutada UDF mille olete just koodis loonud ( MatchByIndex ) ja õpilase ID ja eksamimärkide edastamine konkreetse õpilase kohta funktsiooni sulgudes.
Kuna me üritame välja võtta nime " Finn" tema ID (105) ja Marks (84) , nii et meie puhul saab valemiks,
=MatchByIndex(105,84)
- Seejärel vajutage Sisesta .
Vaadake järgmist pilti.
Veebilehel Lahter F5 , oleme edukalt välja otsinud nime " Finn" lihtsalt läbides oma ID ja Marks funktsiooni sees, mille me lõime VBA kood.
VBA koodi selgitus
Funktsioon MatchByIndex(x As Double, y As Double)
Uue funktsiooni loomine ja muutujate edastamine selle sees. Funktsioonile võib määrata suvalise nime.
Const StartRow = 4
Meie rida algab reast number 4. Te peate esitama rea numbri, millest teie andmestik algab.
Dim EndRow As Long Dim iRow As Long
Muutujate määratlemine.
With Worksheets("UDF") EndRow = .Range("C:D").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Kõigepealt määratlege tööleht, millega töötada. Meie lehe nimi on "UDF", te peaksite andma oma töölehele vastava nime. Seejärel alustage otsingut vahemikus C:D esimesest määratletud reast kuni viimase reani.
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
Alustame iteratsiooni esimesest reast kuni viimase reani. Kui esimene väärtus, mille me funktsiooni sees edastame, jääb funktsiooni C veergu ja kui teine väärtus, mille me funktsiooni sees edastame, jääb funktsiooni D veergu, siis tagastab see vaste veergu B veerus. Vastasel juhul lõpetage funktsioon, lõpetage kõik avaldised ja minge järgmisele reale.
MatchByIndex = "Andmeid ei leitud" End Function
Kui eelmist tingimust ei täideta täitmise ajal, siis tagastatakse teade "Andmeid ei leitud" ja kood lahkub funktsioonist.
Loe edasi: INDEX-MATCH mitme kriteeriumiga osalise teksti jaoks Excelis (2 võimalust)
Kriteeriumid - 3: VBA rakendamine MATCH-väärtuse tagastamiseks Exceli mitme andmega tabelist
Selles jaotises õpime, kuidas tagastab tabeli indeksite järgi sobiva väärtuse MsgBoxi tabelist aadressil VBA Excel.
Vaatame, kuidas ekstraheerida Marks meie andmekogumis esitatud tabelist ( T võimeline nimi: TableMatch ) teatud õpilase kohta, andes Nimi ja ID koodi sees. Meie puhul on Nimi ja ID on Finn ja 105 vastavalt.
Sammud:
- Esiteks, avage Visual Basic toimetaja alates Arendaja vahekaart ja Sisesta a Moodul koodiaknas.
- Siis, koopia järgmine kood ja paste see koodiaknasse.
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
Teie kood on nüüd valmis käivitamiseks.
- Hiljem, Käivita seda koodi ja vaadake järgmist pilti, et näha, mis selle tulemusena juhtus.
Nagu ülaltoodud pildilt näha, on seal Microsoft Excel hüpikaken, mis näitab teile Märks: 84 aadressilt ID: 105 ja Nimi: Finn mida me koodis ette andsime.
VBA koodi selgitus
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
Muutujate määratlemine.
Set iBook = Application.ThisWorkbook Set iSheet = iBook.Sheets("Return Result") Set iTable = iSheet.ListObjects("TableMatch")
Lehe nime ja tabeli nime määramine muutujate sees.
TargetID = 105 TargetName = "Finn" IdColumn = iTable.ListColumns("Student ID").Index NameColumn = iTable.ListColumns("Student Name").Index MarksColumn = iTable.ListColumns("Exam Marks").Index
Otsinguväärtuste ja otsingumootori veergude salvestamine.
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 If iResult Then Exit For Next iCount
See kooditükk skaneerib läbi allkirja algusest lõpuni ja kui ta leiab otsingusammastest määratletud ID ja nime kokkulangevuse, siis salvestab tulemuse ja sulgeb kõik avaldused. Samuti väljub iteratsioonist ja läheb koodi järgmisse ossa.
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
Viskab tulemuse MsgBoxi.
Loe edasi: Mitme väärtuse otsimine ja tagastamine Excelis ühte lahtrisse aheldatuna
Kokkuvõte
Kokkuvõtteks näitas see artikkel teile 3 erinevat meetodit, kuidas teostada INDEX MATCH mitme kriteeriumi alusel Excelis koos VBA makro . ma loodan, et see artikkel oli teile väga kasulik. Võite julgelt esitada mis tahes küsimusi selle teema kohta.