VBA INDEX MATCH pagal kelis kriterijus "Excel" programoje (3 metodai)

  • Pasidalinti
Hugh West

Kai turime didelį duomenų kiekį, kartais sunku iš duomenų rinkinio išskirti konkrečius duomenis. Kartu su "Excel INDEKSAS ir MATCH funkcijos gali gauti bet kokius duomenis, net ir iš didžiulio duomenų rinkinio. VBA yra veiksmingiausias, greičiausias ir saugiausias būdas atlikti bet kokią operaciją "Excel" programoje. Šiame straipsnyje parodysime 3 skirtingus metodus, kaip atlikti INDEX MATCH pagal kelis kriterijus "Excel" programoje su VBA makrokomandos .

Atsisiųsti darbo knygą

Nemokamą "Excel" pratybų sąsiuvinį galite atsisiųsti iš čia.

VBA INDEX MATCH pagal kelis kriterijus.xlsm

3 metodai su VBA INDEX MATCH pagal kelis kriterijus "Excel" programoje

Tolesniuose skyriuose parodysime, kaip atlikti INDEX MATCH pagal kelis diapazono kriterijus , konkrečiam pasirinkimui ir lentelės "Excel" programoje su VBA .

Aukščiau pateikiame duomenų rinkinį, kuris bus naudojamas šiame straipsnyje. Mokinio vardas ir pavardė , Studento ID, ir Egzamino ženklai kiekvieno duomenų rinkinyje esančio mokinio rezultatą. Išskirsime tam tikrą rezultatą, esantį viename stulpelyje, remdamiesi kitų dviejų stulpelių sąlygomis.

Kriterijus - 1: Įterpkite VBA su INDEX MATCH kelioms (dviem) dimensijoms ieškoti "Excel" programoje

Panagrinėkime šį paveikslėlį. Išsaugojome konkretaus mokinio vardą " Kraštas" svetainėje Ląstelė G4 ; ir stulpelį, kurio ieškosime Rezultatas in, Egzamino ženklai , yra saugomas Ląstelė G5 Mes ieškosime Egzamino ženklai stulpelį ir saugoti Žymos kad " Kraštas" pateko į Ląstelė G6 .

Ieškant rezultato atliekami veiksmai dvimatis masyvas su INDEKSAS ir MATCH "Excel" programoje su VBA pateikiami toliau.

Žingsniai:

  • Pradžioje paspauskite Alt + F11 klaviatūroje arba eikite į skirtuką Programuotojas -> "Visual Basic atidaryti "Visual Basic" redaktorius .

  • Tada iššokančiame kodo lange meniu juostoje spustelėkite Insert -> Modulis .

  • Tada, kopijuoti šį kodą ir įklijuokite jį įveskite į kodo langą.
 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 

Dabar jūsų kodas paruoštas paleisti.

  • Dabar paspauskite F5 klaviatūroje arba meniu juostoje pasirinkite Run -> Run Sub/UserForm Taip pat galite tiesiog spustelėti maža piktograma "Run submeniu juostoje, kad paleistumėte makrokomandą.

Po kodo vykdymo pažiūrėkite į toliau pateiktą gif paveikslėlį, kad pamatytumėte rezultatą.

Dėl to Žymos kad " Kraštas" gavo egzaminą, 67 , gaunama iš Ląstelė G7 .

VBA kodo paaiškinimas

 Dim iSheet As Worksheet 

Darbalapio kintamojo apibrėžimas.

 Set iSheet = Darbalapiai ("Du matmenys") 

Išsaugokite darbalapio pavadinimą. Mūsų lapo pavadinimas yra "Two Dimension" (Du matmenys), turėtumėte nurodyti pavadinimą pagal savo skaičiuoklę.

 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)) 

Ši kodo dalis pasirenka diapazoną C5:D14 kaip paieškos diapazoną. Tada ieškokite atitikmens, saugomo ląstelėje G4 diapazone B5:B14 ir ieškokite atitikmens, kuris saugomas ląstelėje G5 diapazone C4:D4 ir perduokite rezultatą ląstelei G6 .

Skaityti daugiau: Kaip naudoti INDEX MATCH su keliais kriterijais datų intervalui

Kriterijus - 2: Taikyti makrokomandą, kad surastumėte MATCH reikšmę pagal INDEX su vartotojo apibrėžta funkcija (UDF)

Galite iš duomenų rinkinio išgauti suderintas reikšmes naudodami naudotojo apibrėžta funkcija (UDF) . Iš toliau pateikto paveikslėlio matyti, kad ketiname perduoti Studento ID ir Egzamino ženklai tam tikro mokinio ir funkcija mums išmeta Pavadinimas to konkretaus mokinio.

Pažiūrėkime, kaip tai pasiekti Mokinio vardas "Finn" su VBA .

Žingsniai:

  • Kaip parodyta anksčiau, atidarykite "Visual Basic" redaktorius Kūrėjas skirtukas ir Įdėkite a Modulis kodo lange.
  • Tada kodo lange, kopijuoti šį kodą ir įklijuokite jį.
 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" & amp; iRow).Value Exit Function End If Next iRow End With MatchByIndex = "Duomenų nerasta" End Function 

  • Nebėkite šį kodą, išsaugoti jį.
  • Dabar, grįžti į darbalapį domina. Pasirinkite bet kurią ląstelę kuriame norite saugoti rezultatą. Mūsų atveju tai yra Eilutė F5 .
  • Toje kameroje, rašyti UDF ką tik sukurtame kode ( MatchByIndex ) ir perduoti studento ID ir egzamino pažymius. konkretaus mokinio, esančio funkcijos skliausteliuose.

Kadangi bandome išgauti pavadinimą " Finas" iš jo ID (105) ir Žymos (84) , todėl mūsų atveju formulė tampa tokia,

=Sutapti pagal indeksą(105,84)

  • Tada paspauskite Įveskite .

Pažvelkite į šį paveikslėlį.

Svetainėje Eilutė F5 , mes sėkmingai gavome pavadinimą " Finas" paprasčiausiai perduodant jo ID ir Žymos funkcijos, kurią sukūrėme VBA kodas.

VBA kodo paaiškinimas

 Funkcija MatchByIndex(x As Double, y As Double) 

Naujos funkcijos sukūrimas ir kintamųjų perdavimas į jos vidų. Funkcijai galite apibrėžti bet kokį pavadinimą.

 Konst StartRow = 4 

Mūsų eilutė prasideda nuo eilutės Nr. 4. Turite nurodyti eilutės numerį, nuo kurio prasideda jūsų duomenų rinkinys.

 Dim EndRow As Long Dim iRow As Long 

Kintamųjų apibrėžimas.

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

Pirmiausia apibrėžkite darbalapį, su kuriuo norite dirbti. Mūsų lapo pavadinimas yra "UDF", turėtumėte nurodyti pavadinimą pagal savo skaičiuoklę. Tada pradėkite paiešką diapazone C:D nuo pirmos apibrėžtos eilutės iki paskutinės eilutės.

 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 

Pradėkite iteruoti nuo pirmos iki paskutinės eilutės. Jei pirmoji reikšmė, kurią perduosime funkcijos viduje, patenka į C stulpelyje ir jei antroji reikšmė, kurią perduosime funkcijos viduje, patenka į D stulpelyje, tada bus grąžinamas atitikmuo iš B Priešingu atveju išeikite iš funkcijos, užbaigkite visus teiginius ir pereikite prie kitos eilutės.

 MatchByIndex = "Duomenų nerasta" End Function 

Jei vykdant ankstesnė sąlyga nebus įvykdyta, bus grąžinamas pranešimas "Duomenys nerasti" ir kodas paliks funkciją.

Skaityti daugiau: INDEX-MATCH su keliais dalinio teksto kriterijais "Excel" programoje (2 būdai)

Kriterijus - 3: Įgyvendinkite VBA, kad grąžintumėte MATCH reikšmę iš "Excel" lentelės su keliais duomenimis

Šiame skyriuje sužinosime, kaip grąžinti suderintą vertę pagal indeksus iš MsgBox lentelės svetainėje VBA "Excel".

Pažiūrėkime, kaip išgauti Žymos iš mūsų duomenų rinkinyje pateiktos lentelės ( T galimas pavadinimas: TableMatch ) tam tikro mokinio, pateikiant Pavadinimas ir ID kodo viduje. Mūsų atveju Pavadinimas ir ID bus Finn ir 105 atitinkamai.

Žingsniai:

  • Pirma, atidarykite "Visual Basic" redaktorius Kūrėjas skirtukas ir Įdėkite a Modulis kodo lange.
  • Tada, kopijuoti šį kodą ir įklijuokite jį įveskite į kodo langą.
 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 

Dabar jūsų kodas paruoštas paleisti.

  • Vėliau, Paleisti šį kodą ir pažiūrėkite į toliau pateiktą paveikslėlį, kad pamatytumėte, kas atsitiko.

Kaip matote iš pirmiau pateikto paveikslėlio, yra "Microsoft Excel iššokančio pranešimo langą, kuriame rodoma Žymos: 84 ID: 105 ir Vardas ir pavardė: Finn kurį pateikėme kodo viduje.

VBA kodo paaiškinimas

 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 

Kintamųjų apibrėžimas.

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

lapo pavadinimo ir lentelės pavadinimo nustatymas kintamųjų viduje.

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

Paieškos reikšmių ir ieškomų paieškos stulpelių saugojimas.

 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 

Ši kodo dalis nuskaito nuo indeksų pradžios iki pabaigos ir, jei paieškos stulpeliuose randa apibrėžto ID ir Vardo atitikmenį, išsaugo rezultatą ir uždaro visus teiginius. Taip pat išeina iš iteracijos ir pereina prie kitos kodo dalies.

 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 

Išmeta rezultatą į MsgBox langelį.

Skaityti daugiau: Kelių verčių, sujungtų į vieną ląstelę, paieška ir grąžinimas "Excel" programoje

Išvada

Baigdamas norėčiau pasakyti, kad šiame straipsnyje buvo parodyti 3 skirtingi metodai, kaip atlikti INDEX MATCH pagal kelis kriterijus "Excel" programoje su VBA makrokomandos . tikiuosi, kad šis straipsnis jums buvo labai naudingas. Drąsiai užduokite bet kokius su šia tema susijusius klausimus.

Hugh Westas yra labai patyręs Excel treneris ir analitikas, turintis daugiau nei 10 metų patirtį šioje srityje. Jis yra įgijęs apskaitos ir finansų bakalauro bei verslo administravimo magistro laipsnius. Hugh turi aistrą mokymui ir sukūrė unikalų mokymo metodą, kurį lengva sekti ir suprasti. Jo ekspertinės žinios apie „Excel“ padėjo tūkstančiams studentų ir specialistų visame pasaulyje tobulinti savo įgūdžius ir tobulėti savo karjeroje. Savo tinklaraštyje Hugh dalijasi savo žiniomis su pasauliu, siūlydamas nemokamus „Excel“ vadovėlius ir internetinius mokymus, kad padėtų asmenims ir įmonėms išnaudoti visą savo potencialą.