VBA INDEX MATCH Based on Multiple Criteria in Excel (3 Methods)

  • Udostępnij To
Hugh West

Kiedy mamy dużą ilość danych, to czasami trudno jest wyodrębnić ze zbioru danych jakieś konkretne dane.Wraz z funkcją Excela INDEX oraz MATCH funkcje mogą pobrać dowolny rodzaj danych nawet w ogromnym zbiorze danych. Implementacja VBA jest najbardziej efektywną, najszybszą i najbezpieczniejszą metodą wykonywania dowolnych operacji w Excelu. W tym artykule pokażemy 3 różne metody, jak wykonać INDEX MATCH na podstawie wielu kryteriów w programie Excel z Makro VBA .

Pobierz Workbook

Darmowy ćwiczeniowy zeszyt Excela można pobrać stąd.

VBA INDEX MATCH Based on Multiple Criteria.xlsm

3 Metody z VBA INDEX MATCH oparte na wielu kryteriach w Excelu

W kolejnych częściach pokażemy, jak wykonać INDEX MATCH na podstawie wielu kryteriów dla zakresu , dla konkretnego wyboru oraz do tabeli w Excelu z VBA .

Powyżej mamy zbiór danych, który będzie śledzony w tym artykule.Mamy Imię i nazwisko ucznia , Legitymacja studencka, oraz Oceny z egzaminu Wyodrębnimy pewien wynik znajdujący się w jednej kolumnie na podstawie warunków z pozostałych dwóch kolumn.

Kryteria - 1: Osadzić VBA z INDEX MATCH dla Multiple (Two) Dimensional Lookup w Excelu

Rozważmy następujący obrazek. Mamy zapisane konkretne nazwisko ucznia " Edge" w Komórka G4 i kolumnę, w której będziemy szukać Wynik w, Oceny z egzaminu , jest przechowywany w Komórka G5 . We will search in the Oceny z egzaminu i zapisać Marks że " Edge" wszedł Komórka G6 .

Kroki, które należy wykonać, aby uzyskać wynik tablica dwuwymiarowa z INDEX oraz MATCH w Excelu z VBA podano poniżej.

Kroki:

  • Na początku naciśnij Alt + F11 na klawiaturze lub przejdź do zakładki Programista -> Visual Basic otworzyć Edytor Visual Basic .

  • Następnie w wyskakującym oknie kodu, z paska menu, kliknij Insert -> Moduł .

  • Następnie, kopia następujący kod i pasta w oknie kodu.
 Sub IndexMatchStudent() Dim iSheet As Worksheet Set iSheet = Worksheets("Dwa wymiary") 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 

Twój kod jest teraz gotowy do uruchomienia.

  • Teraz naciśnij F5 na klawiaturze lub z paska menu wybrać Run -> Run Sub/UserForm. Możesz też po prostu kliknąć na mała ikona Uruchom na pasku podmenu, aby uruchomić makro.

Po wykonaniu kodu spójrz na poniższy gif, aby zobaczyć wynik.

W związku z tym Marks że " Edge" dostał na egzaminie, 67 , jest pobierany w Komórka G7 .

Objaśnienie kodu VBA

 Dim iSheet As Worksheet 

Określenie zmiennej Worksheet.

 Set iSheet = Worksheets("Dwa wymiary") 

Zapisz nazwę arkusza. Nazwa naszego arkusza to "Dwa wymiary", powinieneś podać nazwę zgodną z Twoim arkuszem.

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

Ten fragment kodu wybiera zakres C5:D14 Następnie należy wyszukać dopasowanie, które jest zapisane w komórce G4 w zasięgu B5:B14 i szukają dopasowania, które jest zapisane w komórce G5 w zasięgu C4:D4 i przekazać wynik do komórki G6 .

Read More: Jak użyć INDEX MATCH z wieloma kryteriami dla zakresu dat?

Kryteria - 2: Zastosuj Makro aby znaleźć wartość dopasowania przez INDEKS z funkcją zdefiniowaną przez użytkownika (UDF)

Możesz wyodrębnić dopasowane wartości z zestawu danych za pomocą funkcja zdefiniowana przez użytkownika (UDF) Na poniższym obrazku, to co zrobimy to, przekażemy Legitymacja studencka oraz Oceny z egzaminu pewnego studenta, a funkcja rzuci nam Nazwa tego konkretnego ucznia.

Zobaczmy, jak to osiągnąć dla Imię ucznia "Finn" z VBA .

Kroki:

  • Jak pokazano wcześniej, otwarte Edytor Visual Basic od Deweloper zakładka i Wkładka a Moduł w oknie kodu.
  • Następnie w oknie kodu, kopia następujący kod i pasta to.
 Function MatchByIndex(x As Double, y As Double) Const StartRow = 4 Dim EndRow As Long Dim iRow As Long With Worksheets("FROM") 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 = "Data Not found" End Function 

  • Nie uciekaj. ten kod, uratować to.
  • Teraz, wróć do arkusza zainteresowania. Wybierz dowolną komórkę że chcesz przechowywać wynik. W naszym przypadku jest to Komórka F5 .
  • W tej celi, napisać UDF które właśnie stworzyłeś w kodzie ( MatchByIndex ) oraz przekazać legitymację studencką i oceny z egzaminu konkretnego ucznia wewnątrz nawiasów funkcji.

Ponieważ próbujemy wyodrębnić nazwę " Finn" od jego ID (105) oraz Marki (84) , więc dla naszego przypadku wzór staje się,

=MatchByIndex(105,84)

  • Następnie naciśnij Wejdź na stronę .

Spójrz na poniższy obrazek.

W Komórka F5 , udało nam się pobrać nazwę " Finn" po prostu przechodząc przez jego ID oraz Marks wewnątrz funkcji, którą utworzyliśmy w VBA kod.

Objaśnienie kodu VBA

 Function MatchByIndex(x As Double, y As Double) 

Tworzenie nowej funkcji i przekazywanie zmiennych wewnątrz niej. Można zdefiniować dowolną nazwę do funkcji.

 Const StartRow = 4 

Nasz wiersz zaczyna się od wiersza nr 4. Musisz podać numer wiersza, od którego zaczyna się twój zbiór danych.

 Dim KoniecRow As Long Dim iRow As Long 

Definiowanie zmiennych.

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

Najpierw należy zdefiniować arkusz, z którym będziemy pracować. Nazwa naszego arkusza to "UDF", należy podać nazwę zgodną z posiadanym arkuszem. Następnie należy rozpocząć wyszukiwanie w zakresie C:D od pierwszego zdefiniowanego przez nas rzędu do ostatniego.

 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 

Rozpocznij iterację od pierwszego do ostatniego wiersza. Jeśli pierwsza wartość, którą przekażemy wewnątrz funkcji, mieści się w przedziale C i jeśli druga wartość, którą przekażemy wewnątrz funkcji mieści się w kolumnie D to zwróci dopasowanie z kolumny B W przeciwnym razie zamknij funkcję, zakończ wszystkie instrukcje i przejdź do następnego wiersza.

 MatchByIndex = "Dane nie zostały znalezione" End Function 

Jeżeli podczas wykonywania nie zostanie spełniony poprzedni warunek, to zostanie zwrócony komunikat "Data Not Found" i kod opuści funkcję.

Read More: INDEX-MATCH z wieloma kryteriami dla częściowego tekstu w Excelu (2 sposoby)

Kryteria - 3: Implementacja VBA do zwracania wartości MATCH z tabeli z wieloma danymi w Excelu

W tym rozdziale dowiemy się, jak zwrócić wartość dopasowaną według indeksów z tabeli w MsgBox w VBA Excel.

Zobaczmy, jak wyodrębnić Marks z tabeli przedstawionej w naszym zbiorze danych ( T Nazwa: TableMatch ) określonego ucznia poprzez podanie Nazwa i ID w kodzie. W naszym przypadku Nazwa i ID będzie Finn oraz 105 odpowiednio.

Kroki:

  • Po pierwsze, otwórz Edytor Visual Basic od Deweloper zakładka i Wkładka a Moduł w oknie kodu.
  • Następnie, kopia następujący kod i pasta w oknie kodu.
 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 

Twój kod jest teraz gotowy do uruchomienia.

  • Później, Uruchom ten kod i spójrz na następujący obraz, aby zobaczyć, co się stało w wyniku.

Jak widać na powyższym obrazku, istnieje m.in. Microsoft Excel wyskakujące okienko z komunikatem pokazujące Znaki: 84 z ID: 105 oraz Imię: Finn które podaliśmy wewnątrz kodu.

Objaśnienie kodu VBA

 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 

Definiowanie zmiennych.

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

Ustawienie nazwy arkusza i nazwy tabeli wewnątrz zmiennych.

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

Przechowywanie wartości lookup i kolumn lookup do przeszukiwania.

 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 

Ten fragment kodu skanuje od początku do końca skryptu i jeśli znajdzie dopasowanie zdefiniowanego identyfikatora i nazwy w kolumnach wyszukiwania, a następnie przechowuje wynik i zamyka wszystkie oświadczenia. Również opuścić iterację i przejść do następnej części kodu.

 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 

Wyrzuca wynik w MsgBox.

Read More: Wyszukaj i zwróć wiele wartości połączonych w jednej komórce w Excelu

Wniosek

Podsumowując, ten artykuł pokazał Ci 3 różne metody jak wykonać INDEX MATCH na podstawie wielu kryteriów w programie Excel z Makro VBA Mam nadzieję, że ten artykuł był dla Ciebie bardzo korzystny. Zapraszam do zadawania wszelkich pytań związanych z tematem.

Hugh West jest bardzo doświadczonym trenerem i analitykiem Excela z ponad 10-letnim doświadczeniem w branży. Posiada tytuł licencjata w dziedzinie rachunkowości i finansów oraz tytuł magistra administracji biznesowej. Hugh ma pasję do nauczania i opracował unikalne podejście do nauczania, które jest łatwe do naśladowania i zrozumienia. Jego specjalistyczna wiedza na temat programu Excel pomogła tysiącom studentów i profesjonalistów na całym świecie doskonalić swoje umiejętności i osiągać doskonałe wyniki w karierze. Za pośrednictwem swojego bloga Hugh dzieli się swoją wiedzą ze światem, oferując bezpłatne samouczki programu Excel i szkolenia online, aby pomóc osobom indywidualnym i firmom w pełni wykorzystać swój potencjał.