Satura rādītājs
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.xlsm3 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.