VBA INDEX MATCH op basis van meerdere criteria in Excel (3 methoden)

  • Deel Dit
Hugh West

Wanneer we een grote hoeveelheid gegevens hebben, is het soms moeilijk om specifieke gegevens uit de dataset te halen. Samen met Excel's INDEX en MATCH functies kunnen alle soorten gegevens ophalen, zelfs in een enorme dataset. Het implementeren van VBA is de meest effectieve, snelste en veiligste methode om elke bewerking in Excel uit te voeren. In dit artikel laten we u 3 verschillende methoden zien voor het uitvoeren van INDEX MATCH gebaseerd op meerdere criteria in Excel met de VBA-macro .

Werkboek downloaden

U kunt de gratis oefen Excel-werkmap hier downloaden.

VBA INDEX MATCH gebaseerd op meerdere criteria.xlsm

3 Methoden met VBA INDEX MATCH op basis van meerdere criteria in Excel

In de volgende secties laten we zien hoe u het volgende kunt doen INDEX MATCH gebaseerd op meerdere criteria voor een bereik , voor een specifieke selectie en voor een tabel in Excel met VBA .

Hierboven hebben we de dataset die dit artikel zal volgen. We hebben de Naam student , Student ID, en Examencijfers Van elke leerling in de dataset halen we een bepaald resultaat uit één kolom op basis van voorwaarden uit de andere twee kolommen.

Criteria - 1: VBA insluiten met INDEX MATCH voor meervoudig (twee) dimensioneel zoeken in Excel

Beschouw de volgende afbeelding. We hebben de naam van een specifieke leerling opgeslagen " Edge" in Cel G4 en de kolom waarin we gaan zoeken in de Resultaat in, Examencijfers wordt opgeslagen in Cel G5 We zullen zoeken in de Examencijfers kolom en sla de Marks dat " Edge" kwam binnen Cel G6 .

De stappen voor het opzoeken resulteren in een tweedimensionale matrix met INDEX en MATCH in Excel met VBA worden hieronder gegeven.

Stappen:

  • Druk in het begin op Alt + F11 op uw toetsenbord of ga naar de tab Ontwikkelaar -> Visual Basic om te openen Visual Basic-editor .

  • Vervolgens klikt u in het pop-up codevenster in de menubalk op Invoegen -> Module .

  • Dan, kopie de volgende code en pasta in het codevenster.
 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 

Uw code is nu klaar om te draaien.

  • Druk nu op F5 op uw toetsenbord of selecteer in de menubalk Run -> Run Sub/UserForm U kunt ook gewoon op de klein pictogram Run in de submenubalk om de macro uit te voeren.

Kijk na het uitvoeren van de code naar het onderstaande gif om het resultaat te zien.

Als gevolg daarvan zijn de Marks dat " Edge" in het examen, 67 wordt opgehaald in Cel G7 .

VBA-code uitleg

 Dim iSheet als werkblad 

De variabele van Werkblad definiëren.

 Set iSheet = Worksheets("Two Dimension") 

Sla de naam van het werkblad op. De naam van ons blad is "Two Dimension", u moet de naam volgens uw spreadsheet opgeven.

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

Dit stukje code selecteert het bereik C5:D14 als het opzoekbereik. Zoek dan naar de overeenkomst die is opgeslagen in cel G4 binnen bereik B5:B14 en zoek naar de overeenkomst die is opgeslagen in cel G5 binnen bereik C4:D4 en geeft het resultaat door aan cel G6 .

Lees meer: Hoe INDEX MATCH gebruiken met meerdere criteria voor datumbereik

Criteria - 2: Macro toepassen om MATCH waarde te vinden door INDEX met User-Defined Function (UDF)

U kunt overeenkomende waarden uit een dataset halen met een door de gebruiker gedefinieerde functie (UDF) Van de volgende afbeelding, wat we gaan doen is, zullen we de Student ID en Examencijfers van een bepaalde student en de functie zal ons de Naam van die specifieke student.

Laten we eens kijken hoe we dat kunnen bereiken voor Student Naam "Finn" met VBA .

Stappen:

  • Zoals eerder aangegeven, open Visual Basic-editor van de Ontwikkelaar tab en Plaats a Module in het codevenster.
  • Dan, in het codevenster, kopie de volgende code en pasta het.
 Functie 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 Volgende iRow End With MatchByIndex = "Gegevens niet gevonden" End Function 

  • Niet rennen. deze code, red het.
  • Nu, ga terug naar het werkblad van belang. Kies een cel dat u het resultaat wilt opslaan. In ons geval is het Cel F5 .
  • In die cel, schrijf de UDF die u zojuist hebt gemaakt in de code ( MatchByIndex ) en de studenten-ID en examencijfers doorgeven van de specifieke leerling binnen de haakjes van de functie.

Omdat we proberen de naam " Finn" van zijn ID (105) en Markeringen (84) dus voor ons geval wordt de formule,

=MatchByIndex(105,84)

  • Druk vervolgens op Ga naar .

Kijk naar de volgende afbeelding.

In Cel F5 hebben we met succes de naam " Finn" door simpelweg zijn ID en Marks binnen de functie die we gemaakt hebben in de VBA code.

VBA-code uitleg

 Functie MatchByIndex(x Als Double, y Als Double) 

Een nieuwe functie maken en de variabelen daarin doorgeven. Je kunt een willekeurige naam aan de functie geven.

 Const StartRow = 4 

Onze rij begint bij rij nummer 4. U moet het rijnummer opgeven waarmee uw dataset begint.

 Dim EndRow As Long Dim iRow As Long 

Het definiëren van de variabelen.

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

Definieer eerst het werkblad om mee te werken. De naam van ons blad is "UDF", u moet de naam opgeven volgens uw spreadsheet. Begin dan te zoeken in het bereik C:D van de eerste rij die we gedefinieerd hebben tot de laatste rij.

 Voor iRow = StartRow Tot EndRow Als .Range("C" & iRow).Value = x En .Range("D" & iRow).Value = y Dan MatchByIndex = .Range("B" & iRow).Value Exit Function End If Volgende iRow End With 

Begin met itereren van de eerste naar de laatste rij. Als de eerste waarde die we in de functie doorgeven binnen de C kolom en als de tweede waarde die we in de functie doorgeven binnen de D kolom, dan zal het de overeenkomst van de B Anders verlaat u de functie, beëindigt u alle verklaringen en gaat u naar de volgende regel.

 MatchByIndex = "Gegevens niet gevonden" Einde functie 

Als tijdens de uitvoering niet aan de vorige voorwaarde wordt voldaan, wordt het bericht "Gegevens niet gevonden" teruggestuurd en verlaat de code de functie.

Lees meer: INDEX-MATCH met meerdere criteria voor gedeeltelijke tekst in Excel (2 manieren)

Criteria - 3: VBA implementeren om MATCH-waarde terug te geven uit een tabel met meerdere gegevens in Excel

In dit deel leren we hoe we een overeenkomende waarde door de indexen van een tabel in de MsgBox teruggeven in VBA Excel.

Laten we eens kijken hoe we de Marks uit de tabel in onze dataset ( T able Name: TableMatch ) van een bepaalde student door de Naam en de ID in de code. In ons geval is de Naam en de ID zal Finn en 105 respectievelijk.

Stappen:

  • Ten eerste, open Visual Basic-editor van de Ontwikkelaar tab en Plaats a Module in het codevenster.
  • Dan, kopie de volgende code en pasta in het codevenster.
 Sub ReturnMatchedResultByIndex() Dim iBook als Werkboek Dim iSheet als Werkblad Dim iTable als Object Dim iValue als Variant Dim TargetName als String Dim TargetID als Long Dim IdColumn als Long Dim NameColumn als Long Dim MarksColumn als Long Dim iCount als Long Dim iResult als 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 Dan iResult = True 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 & "Name: " & TargetName & vbLf & "Marks Not found" End If End Sub 

Uw code is nu klaar om te draaien.

  • Later, Ren deze code en kijk naar de volgende afbeelding om te zien wat het resultaat is.

Zoals u in de bovenstaande afbeelding kunt zien, is er een Microsoft Excel pop-up berichtvenster met de Scores: 84 van ID: 105 en Naam: Finn die we in de code hebben opgenomen.

VBA-code uitleg

 Dim iBook als Werkboek Dim iSheet als Werkblad Dim iTable als Object Dim iValue als Variant Dim TargetName als String Dim TargetID als Long Dim IdColumn als Long Dim NameColumn als Long Dim MarksColumn als Long Dim iCount als Long Dim iResult als Boolean 

Het definiëren van de variabelen.

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

Het instellen van de bladnaam en de tabelnaam in variabelen.

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

Het opslaan van de opzoekwaarden en de opzoekkolommen om in te zoeken.

 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 iResult Then Exit For Next iCount 

Dit stukje code scant van het begin tot het einde van het subscript en als het een overeenkomst vindt tussen de gedefinieerde ID en de Naam in de zoekkolommen, slaat het resultaat op en sluit alle verklaringen af. Sluit ook de iteratie af en ga naar het volgende deel van de code.

 Als iResult Dan MsgBox "ID: " & TargetID & vbLf & "Name: " & TargetName & vbLf & "Marks: " & iValue(iCount, MarksColumn) Else MsgBox "ID: " & TargetID & vbLf & "Name: " & TargetName & vbLf & "Marks Not found" End If 

Gooit het resultaat in de MsgBox.

Lees meer: Meerdere waarden in één cel opzoeken en retourneren in Excel

Conclusie

Tot slot heeft dit artikel u 3 verschillende methoden laten zien voor het uitvoeren van INDEX MATCH gebaseerd op meerdere criteria in Excel met de VBA-macro Ik hoop dat dit artikel nuttig voor u is geweest. Voel u vrij om vragen te stellen over dit onderwerp.

Hugh West is een zeer ervaren Excel-trainer en -analist met meer dan 10 jaar ervaring in de branche. Hij heeft een bachelor in Accounting en Finance en een master in Business Administration. Hugh heeft een passie voor lesgeven en heeft een unieke lesaanpak ontwikkeld die gemakkelijk te volgen en te begrijpen is. Zijn deskundige kennis van Excel heeft duizenden studenten en professionals over de hele wereld geholpen hun vaardigheden te verbeteren en uit te blinken in hun carrière. Via zijn blog deelt Hugh zijn kennis met de wereld en biedt hij gratis Excel-tutorials en online trainingen aan om individuen en bedrijven te helpen hun volledige potentieel te bereiken.