VBA INDEX MATCH basierend auf mehreren Kriterien in Excel (3 Methoden)

  • Teile Das
Hugh West

Wenn wir eine große Menge an Daten haben, ist es manchmal schwierig, bestimmte Daten aus dem Datensatz zu extrahieren. INDEX und MATCH Funktionen können jede Art von Daten auch in einem großen Datenbestand abrufen. VBA ist die effektivste, schnellste und sicherste Methode, um eine Operation in Excel auszuführen. In diesem Artikel werden wir Ihnen 3 verschiedene Methoden zeigen, wie Sie INDEX MATCH basierend auf mehreren Kriterien in Excel mit der Option VBA-Makro .

Arbeitsbuch herunterladen

Sie können die kostenlose Excel-Arbeitsmappe für die Praxis hier herunterladen.

VBA INDEX MATCH basierend auf mehreren Kriterien.xlsm

3 Methoden mit VBA INDEX MATCH basierend auf mehreren Kriterien in Excel

In den folgenden Abschnitten zeigen wir Ihnen, wie Sie INDEX MATCH basierend auf mehreren Kriterien für einen Bereich , für eine bestimmte Auswahl und für eine Tabelle in Excel mit VBA .

Oben haben wir den Datensatz, dem dieser Artikel folgen wird. Name des Schülers , Studentenausweis, und Prüfungsnoten Wir extrahieren ein bestimmtes Ergebnis, das sich in einer Spalte befindet, anhand von Bedingungen aus den anderen beiden Spalten.

Kriterien - 1: VBA mit INDEX MATCH für eine mehrdimensionale (zweidimensionale) Suche in Excel einbetten

Betrachten Sie das folgende Bild: Wir haben den Namen eines bestimmten Schülers gespeichert " Rand" in Zelle G4 ; und die Spalte, in der wir suchen werden Ergebnis in, Prüfungsnoten wird gespeichert in Zelle G5 Wir suchen in der Prüfungsnoten Spalte und speichern die Marks dass " Rand" eingestiegen Zelle G6 .

Die Schritte zum Nachschlagen ergeben eine zweidimensionale Reihe mit INDEX und MATCH in Excel mit VBA sind unten aufgeführt.

Schritte:

  • Drücken Sie zu Beginn Alt + F11 auf Ihrer Tastatur oder gehen Sie auf die Registerkarte Entwickler -> Visual Basic zu öffnen Visual Basic-Editor .

  • Klicken Sie dann im Pop-up-Codefenster in der Menüleiste auf Einfügen -> Modul .

  • Dann, kopieren. den folgenden Code und einfügen in das Codefenster ein.
 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 

Ihr Code ist nun einsatzbereit.

  • Drücken Sie nun F5 auf Ihrer Tastatur oder wählen Sie in der Menüleiste Run -> Run Sub/UserForm Sie können auch einfach auf die Schaltfläche kleines Ausführungssymbol in der Untermenüleiste, um das Makro auszuführen.

Nach der Ausführung des Codes sehen Sie das Ergebnis in der folgenden Grafik.

Infolgedessen ist die Marks dass " Rand" in der Prüfung erhalten, 67 wird abgerufen in Zelle G7 .

VBA-Code-Erläuterung

 Dim iSheet As Worksheet 

Definieren der Variablen des Arbeitsblatts.

 Set iSheet = Worksheets("Two Dimension") 

Speichern Sie den Namen des Arbeitsblatts. Der Name unseres Arbeitsblatts ist "Two Dimension", Sie sollten den Namen entsprechend Ihrem Arbeitsblatt angeben.

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

Dieser Teil des Codes wählt den Bereich C5:D14 Dann suchen Sie nach der Übereinstimmung, die in der Zelle G4 in Reichweite B5:B14 und suchen Sie nach der Übereinstimmung, die in der Zelle G5 in Reichweite C4:D4 und übergeben das Ergebnis an die Zelle G6 .

Lesen Sie mehr: Verwendung von INDEX MATCH mit mehreren Kriterien für den Datumsbereich

Kriterium - 2: Makro anwenden, um MATCH-Wert nach INDEX mit benutzerdefinierter Funktion (UDF) zu finden

Sie können übereinstimmende Werte aus einem Datensatz mit einer Benutzerdefinierte Funktion (UDF) Aus dem folgenden Bild geht hervor, was wir tun werden: Wir übergeben die Studentenausweis und Prüfungsnoten eines bestimmten Schülers und die Funktion wirft uns die Name des jeweiligen Schülers.

Sehen wir uns an, wie man das erreichen kann für Name des Schülers "Finn" mit VBA .

Schritte:

  • Wie bereits gezeigt, öffnen Visual Basic-Editor von der Entwickler Registerkarte und einfügen. a Modul im Code-Fenster.
  • Dann, im Code-Fenster, kopieren. den folgenden Code und einfügen es.
 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 = "Daten nicht gefunden" End Function 

  • Nicht rennen diesen Code, speichern es.
  • Jetzt, zurück zum Arbeitsblatt von Interesse. Wählen Sie eine beliebige Zelle in dem Sie das Ergebnis speichern wollen. In unserem Fall ist es Zelle F5 .
  • In dieser Zelle, schreiben die UDF die Sie gerade im Code erstellt haben ( MatchByIndex ) und die Studenten-ID und die Prüfungsnoten weitergeben des jeweiligen Schülers innerhalb der Klammern der Funktion.

Da wir versuchen, den Namen " Finn" von seinem ID (105) und Markierungen (84) Für unseren Fall lautet die Formel also,

=MatchByIndex(105,84)

  • Drücken Sie dann Eingabe .

Sehen Sie sich das folgende Bild an.

Unter Zelle F5 haben wir den Namen erfolgreich abgerufen " Finn" indem er einfach seine ID und Marks innerhalb der Funktion, die wir in der VBA Code.

VBA-Code-Erläuterung

 Function MatchByIndex(x As Double, y As Double) 

Erstellen einer neuen Funktion und Übergabe der Variablen darin. Sie können der Funktion einen beliebigen Namen geben.

 Const StartRow = 4 

Unsere Zeile beginnt mit der Zeilennummer 4. Sie müssen die Zeilennummer angeben, mit der Ihr Datensatz beginnt.

 Dim EndRow As Long Dim iRow As Long 

Definieren der Variablen.

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

Definieren Sie zunächst das Arbeitsblatt, mit dem Sie arbeiten wollen. Der Name unseres Arbeitsblatts ist "UDF", Sie sollten den Namen entsprechend Ihrem Arbeitsblatt angeben. Dann beginnen Sie mit der Suche im Bereich C:D von der ersten Zeile, die wir definiert haben, bis zur letzten Zeile.

 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 

Beginnen Sie mit der Iteration von der ersten bis zur letzten Zeile. Wenn der erste Wert, den wir innerhalb der Funktion übergeben, in den Bereich C Spalte und wenn der zweite Wert, den wir in der Funktion übergeben, in die D Spalte, dann wird die Übereinstimmung aus der B Andernfalls verlassen Sie die Funktion, beenden alle Anweisungen und gehen zur nächsten Zeile.

 MatchByIndex = "Daten nicht gefunden" End Function 

Wenn die vorherige Bedingung während der Ausführung nicht erfüllt wird, wird die Meldung "Data Not Found" zurückgegeben und der Code verlässt die Funktion.

Lesen Sie mehr: INDEX-MATCH mit mehreren Kriterien für Teiltext in Excel (2 Möglichkeiten)

Kriterien - 3: VBA implementieren, um MATCH-Wert aus einer Tabelle mit mehreren Daten in Excel zurückzugeben

In diesem Abschnitt lernen wir, wie man einen durch die Indizes übereinstimmenden Wert aus einer Tabelle in der MsgBox zurückgeben in VBA Excel.

Schauen wir uns an, wie man die Marks aus der Tabelle in unserem Datensatz ( T möglicher Name: TableMatch ) eines bestimmten Schülers durch Angabe der Name und die ID In unserem Fall ist die Name und die ID wird sein Finn und 105 beziehungsweise.

Schritte:

  • Erstens: Öffnen Visual Basic-Editor von der Entwickler Registerkarte und einfügen. a Modul im Code-Fenster.
  • Dann, kopieren. den folgenden Code und einfügen in das Codefenster ein.
 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 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 

Ihr Code ist nun einsatzbereit.

  • Später, ausführen. diesen Code und sehen Sie sich das folgende Bild an, um zu sehen, was als Ergebnis passiert ist.

Wie Sie auf dem obigen Bild sehen können, gibt es eine Microsoft Excel Pop-up-Meldungsfeld, das Ihnen die Markierungen: 84 von ID: 105 und Name: Finn die wir innerhalb des Codes bereitgestellt haben.

VBA-Code-Erläuterung

 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 

Definieren der Variablen.

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

Einstellung des Blatt- und Tabellennamens in Variablen.

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

Speicherung der Nachschlagewerte und der zu durchsuchenden Nachschlagespalten.

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

Dieser Teil des Codes scannt vom Anfang bis zum Ende des Teilzeichens und wenn er eine Übereinstimmung zwischen der definierten ID und dem Namen in den Suchspalten findet, speichert er das Ergebnis und schließt alle Anweisungen. Außerdem beendet er die Iteration und geht zum nächsten Teil des Codes über.

 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 

Wirft das Ergebnis in die MsgBox.

Lesen Sie mehr: Suche und Rückgabe mehrerer Werte, die in einer Zelle in Excel verkettet sind

Schlussfolgerung

Abschließend möchte ich Ihnen in diesem Artikel 3 verschiedene Methoden vorstellen, wie Sie INDEX MATCH basierend auf mehreren Kriterien in Excel mit der Option VBA-Makro Ich hoffe, dass dieser Artikel für Sie von Nutzen war. Sie können mir gerne Fragen zum Thema stellen.

Hugh West ist ein äußerst erfahrener Excel-Trainer und -Analyst mit über 10 Jahren Erfahrung in der Branche. Er verfügt über einen Bachelor-Abschluss in Rechnungswesen und Finanzen sowie einen Master-Abschluss in Betriebswirtschaft. Hugh hat eine Leidenschaft für das Unterrichten und hat einen einzigartigen Lehransatz entwickelt, der leicht zu befolgen und zu verstehen ist. Seine Expertenkenntnisse in Excel haben Tausenden von Studenten und Berufstätigen auf der ganzen Welt geholfen, ihre Fähigkeiten zu verbessern und in ihrer Karriere herausragende Leistungen zu erbringen. Über seinen Blog teilt Hugh sein Wissen mit der Welt und bietet kostenlose Excel-Tutorials und Online-Schulungen an, um Einzelpersonen und Unternehmen dabei zu helfen, ihr volles Potenzial auszuschöpfen.