VBA INDEX MATCH, pamatojoties uz vairākiem kritērijiem programmā Excel (3 metodes)

  • Dalīties Ar Šo
Hugh West

Ja mums ir liels datu apjoms, dažkārt ir grūti no datu kopas izvilkt konkrētus datus. Kopā ar Excel INDEX un MATCH funkcijas var iegūt jebkāda veida datus pat no milzīgas datu kopas. VBA ir visefektīvākā, ātrākā un drošākā metode, lai veiktu jebkuru operāciju programmā Excel. Šajā rakstā mēs parādīsim 3 dažādas metodes, kā veikt jebkuru operāciju programmā Excel. INDEX MATCH, pamatojoties uz vairākiem kritērijiem programmā Excel ar VBA makro .

Lejupielādēt darba burtnīcu

No šejienes varat lejupielādēt bezmaksas praktisko Excel darba burtnīcu.

VBA INDEX MATCH, pamatojoties uz vairākiem kritērijiem.xlsm

3 metodes ar VBA INDEX MATCH, pamatojoties uz vairākiem kritērijiem programmā Excel

Turpmākajās sadaļās mēs parādīsim, kā veikt. INDEX MATCH, pamatojoties uz vairākiem diapazona kritērijiem , konkrētai atlasei un tabulai programmā Excel ar VBA .

Virs mums ir datu kopa, kas tiks izmantota šajā rakstā. Mums ir Skolēna vārds , Studenta ID, un Eksāmena atzīmes Mēs izdalīsim noteiktu rezultātu, kas atrodas vienā slejā, pamatojoties uz nosacījumiem no pārējām divām slejām.

Kritērijs - 1: VBA iestrādāšana ar INDEX MATCH vairāku (divu) dimensiju meklēšanai programmā Excel

Aplūkojiet šādu attēlu. Mēs esam saglabājuši konkrēta skolēna vārdu " Edge" vietnē Šūna G4 ; un kolonnu, kurā mēs meklēsim Rezultāts in, Eksāmena atzīmes , tiek glabāts Šūna G5 . Mēs meklēsim Eksāmena atzīmes slejā un saglabāt Marks ka " Edge" iekļuva Šūna G6 .

Veicot meklēšanas darbības, tiek iegūts divdimensiju masīvs ar INDEX un MATCH programmā Excel ar VBA ir norādītas turpmāk.

Soļi:

  • Sākumā nospiediet Alt + F11 uz tastatūras vai atveriet cilni Izstrādātājs -> Visual Basic lai atvērtu Visual Basic redaktors .

  • Pēc tam uznirstošajā koda logā izvēlnes joslā noklikšķiniet uz Ievietot -> Modulis .

  • Tad, kopēt šādu kodu un ielīmēt to ievadiet koda logā.
 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 

Tagad jūsu kods ir gatavs darbam.

  • Tagad nospiediet F5 uz tastatūras vai izvēlnes joslā izvēlieties Run -> Run Sub/UserForm Varat arī vienkārši noklikšķināt uz maza ikona Run apakšizvēlnes joslā, lai palaistu makro.

Pēc koda izpildes apskatiet zemāk redzamo gif attēlu, lai redzētu rezultātu.

Tā rezultātā Marks ka " Edge" ieguva eksāmenā, 67 , tiek iegūts Šūna G7 .

VBA koda skaidrojums

 Dim iLoksne kā darblapa 

Darblapas mainīgā definēšana.

 Set iSheet = darblapas("Divas dimensijas") 

Uzglabājiet darblapas nosaukumu. Mūsu lapas nosaukums ir "Divas dimensijas", jums jānorāda nosaukums atbilstoši jūsu izklājlapai.

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

Šis koda elements izvēlas diapazonu C5:D14 kā meklēšanas diapazonu. Pēc tam meklējiet atbilstību, kas ir saglabāta šūnā G4 diapazonā B5:B14 un meklē atbilstību, kas ir saglabāta šūnā G5 diapazonā C4:D4 un nodod rezultātu šūnai G6 .

Lasīt vairāk: Kā lietot INDEX MATCH ar vairākiem kritērijiem datuma diapazonam

Kritērijs - 2: Makro, lai atrastu MATCH vērtību pēc INDEX ar lietotāja definēto funkciju (UDF)

No datu kopas var iegūt atbilstošās vērtības, izmantojot lietotāja definēta funkcija (UDF) . No šāda attēla, ko mēs gatavojamies darīt, ir, mēs nodosim Studenta ID un Eksāmena atzīmes no konkrēta skolēna un funkcija būs mest mums Nosaukums par konkrēto skolēnu.

Apskatīsim, kā to panākt, lai Skolēna vārds "Finn" ar VBA .

Soļi:

  • Kā parādīts iepriekš, atveriet Visual Basic redaktors no Izstrādātājs cilne un Ievietot a Modulis koda logā.
  • Pēc tam koda logā, kopēt šādu kodu un ielīmēt to.
 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 = "Dati nav atrasti" End Function 

  • Nevadiet šo kodu, saglabāt to.
  • Tagad, atgriezties darblapā interesē. Izvēlieties jebkuru šūnu kurā vēlaties saglabāt rezultātu. Mūsu gadījumā tas ir Šūna F5 .
  • Šajā kamerā, rakstīt UDF tikko izveidotajā kodā ( MatchByIndex ) un nodot studenta ID un eksāmenu atzīmes konkrētā skolēna vārdu funkcijas iekavās.

Tā kā mēs mēģinām iegūt nosaukumu " Finn" no viņa ID (105) un Atzīmes (84) , tāpēc mūsu gadījumā formula ir šāda,

=MatchByIndex(105,84)

  • Pēc tam nospiediet Ievadiet .

Aplūkojiet šādu attēlu.

In Šūna F5 , mēs esam veiksmīgi ieguvuši nosaukumu " Finn" vienkārši nododot viņa ID un Marks funkcijas iekšpusē, ko mēs izveidojām VBA kods.

VBA koda skaidrojums

 Funkcija MatchByIndex(x kā Double, y kā Double) 

Jaunas funkcijas izveide un mainīgo nodošana tās iekšienē. Funkcijai var definēt jebkuru nosaukumu.

 Const StartRow = 4 

Mūsu rinda sākas no 4. rindas. Jums jānorāda rindas numurs, no kura sākas jūsu datu kopa.

 Dim EndRow As Long Dim iRow As Long 

Mainīgo lielumu definēšana.

 Ar darblapām("UDF") EndRow = .Range("C:D").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 

Vispirms definējiet darblapu, ar kuru strādāt. Mūsu lapas nosaukums ir "UDF", jums jānorāda nosaukums atbilstoši jūsu izklājlapai. Pēc tam sāciet meklēt diapazonā. C:D no pirmās definētās rindas līdz pēdējai rindai.

 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 

Sākt iterāciju no pirmās rindas līdz pēdējai rindai. Ja pirmā vērtība, ko mēs nodosim funkcijas iekšienē, iekrīt robežās C slejā, un, ja otrā vērtība, ko mēs nodosim funkcijas iekšpusē, ietilpst slejā D slejā, tad tiks atgriezta atbilstība no B pretējā gadījumā izejiet no funkcijas, pabeidziet visus paziņojumus un pāriet uz nākamo rindu.

 MatchByIndex = "Dati nav atrasti" End Function 

Ja iepriekšējais nosacījums netiek izpildīts, tad tiek atgriezts ziņojums "Dati nav atrasti" un kods atstāj funkciju.

Lasīt vairāk: INDEX-MATCH ar vairākiem kritērijiem daļējam tekstam programmā Excel (2 veidi)

Kritērijs - 3: VBA īstenošana, lai atgrieztu MATCH vērtību no tabulas ar vairākiem datiem programmā Excel

Šajā sadaļā mēs uzzināsim, kā atgriezt saskaņotu vērtību pēc indeksiem no tabulas MsgBox. vietnē VBA Excel.

Apskatīsim, kā iegūt Marks no tabulas, kas parādīta mūsu datu kopā ( T spēja Nosaukums: TableMatch ) par konkrētu skolēnu, sniedzot Nosaukums un ID koda iekšpusē. Mūsu gadījumā Nosaukums un ID būs Finn un 105 attiecīgi.

Soļi:

  • Pirmkārt, atveriet Visual Basic redaktors no Izstrādātājs cilne un Ievietot a Modulis koda logā.
  • Tad, kopēt šādu kodu un ielīmēt to ievadiet koda logā.
 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 

Tagad jūsu kods ir gatavs darbam.

  • Vēlāk, Palaist šo kodu un aplūkojiet tālāk redzamo attēlu, lai redzētu, kas ir noticis tā rezultātā.

Kā redzams attēlā, ir redzams Microsoft Excel uznirstošā ziņojuma logs, kurā tiek parādīts Atzīmes: 84 no ID: 105 un Nosaukums: Finn ko mēs nodrošinājām koda iekšpusē.

VBA koda skaidrojums

 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 

Mainīgo lielumu definēšana.

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

Loksnes nosaukuma un tabulas nosaukuma iestatīšana mainīgajos.

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

Meklēšanas vērtību un meklēšanai paredzēto meklēšanas kolonnu glabāšana.

 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 

Šī koda daļa skenē no apakšraksta sākuma līdz beigām un, ja meklēšanas slejās tiek atrasts definētā ID un nosaukuma sakritība, saglabā rezultātu un aizver visus paziņojumus. Iziet arī no iterācijas un pāriet uz nākamo koda daļu.

 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 

Izmet MsgBox rezultātu.

Lasīt vairāk: Vairāku vērtību meklēšana un atgriešana vienā šūnā programmā Excel

Secinājums

Nobeigumā šajā rakstā tika parādītas 3 dažādas metodes, kā veikt INDEX MATCH, pamatojoties uz vairākiem kritērijiem programmā Excel ar VBA makro . es ceru, ka šis raksts jums ir bijis ļoti noderīgs. Jūs varat uzdot jebkādus jautājumus par šo tēmu.

Hjū Vests ir ļoti pieredzējis Excel treneris un analītiķis ar vairāk nekā 10 gadu pieredzi šajā nozarē. Viņam ir bakalaura grāds grāmatvedībā un finansēs un maģistra grāds uzņēmējdarbības vadībā. Hjū aizraujas ar mācīšanu, un viņš ir izstrādājis unikālu mācīšanas pieeju, kas ir viegli izpildāma un saprotama. Viņa ekspertu zināšanas programmā Excel ir palīdzējušas tūkstošiem studentu un profesionāļu visā pasaulē uzlabot savas prasmes un izcelties karjerā. Izmantojot savu emuāru, Hjū dalās savās zināšanās ar pasauli, piedāvājot bezmaksas Excel apmācības un tiešsaistes apmācību, lai palīdzētu personām un uzņēmumiem pilnībā izmantot savu potenciālu.