Оглавление
Когда у нас есть большой объем данных, иногда бывает трудно извлечь из них какие-либо конкретные данные. Вместе с функцией Excel ИНДЕКС и МАТЧ функции могут извлекать любые данные даже в огромном наборе данных. Реализация VBA это самый эффективный, быстрый и безопасный метод выполнения любых операций в Excel. В этой статье мы покажем вам 3 различных метода, как выполнить следующие операции ИНДЕКСНОЕ СРАВНЕНИЕ на основе нескольких критериев в Excel с помощью макрос VBA .
Скачать рабочую тетрадь
Вы можете скачать бесплатную практическую рабочую тетрадь Excel отсюда.
VBA INDEX MATCH на основе нескольких критериев.xlsm3 метода с помощью VBA INDEX MATCH на основе нескольких критериев в Excel
В следующих разделах мы покажем вам, как выполнить INDEX MATCH на основе нескольких критериев для диапазона , для конкретного выбора и для стола в Excel с VBA .
Выше представлен набор данных, о котором пойдет речь в этой статье. У нас есть файл Имя студента , Студенческий билет, и Экзаменационные оценки Мы будем извлекать определенный результат, находящийся в одном столбце, на основе условий из двух других столбцов.
Критерии - 1: Встраивание VBA с INDEX MATCH для многомерного (двухмерного) поиска в Excel
Рассмотрим следующее изображение. Мы сохранили имя конкретного студента " Край" в Ячейка G4 ; и столбец, в котором мы будем искать Результат в, Экзаменационные оценки хранится в Ячейка G5 Мы будем искать в Экзаменационные оценки столбец и хранить Маркс что " Край" вошёл Ячейка G6 .
Шаги по поиску приводят к двумерный массив с ИНДЕКС и МАТЧ в Excel с VBA приведены ниже.
Шаги:
- В начале нажмите Alt + F11 на клавиатуре или перейдите на вкладку Разработчик -> Visual Basic открыть Редактор Visual Basic .
- Далее, во всплывающем окне кода, в строке меню нажмите Вставка -> Модуль .
- Тогда, копия следующий код и паста его в окно кода.
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
Теперь ваш код готов к выполнению.
- Теперь нажмите F5 на клавиатуре или в строке меню выберите Run -> Run Sub/UserForm Вы также можете просто нажать на маленький значок "Выполнить в строке подменю, чтобы запустить макрос.
После выполнения кода посмотрите на рисунок ниже, чтобы увидеть результат.
В результате Маркс что " Край" получил на экзамене, 67 извлекается в Ячейка G7 .
Объяснение кода VBA
Dim iSheet As Worksheet
Определение переменной рабочего листа.
Set iSheet = Worksheets("Two Dimension")
Сохраните имя рабочего листа. Имя нашего листа - "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))
Этот фрагмент кода выбирает диапазон C5:D14 в качестве диапазона поиска. Затем выполните поиск совпадения, которое хранится в ячейке G4 в диапазоне B5:B14 и искать совпадение, которое хранится в ячейке G5 в диапазоне C4:D4 и передать результат в ячейку G6 .
Читать далее: Как использовать INDEX MATCH с несколькими критериями для диапазона дат
Критерий - 2: Применение макроса для поиска значения совпадения по ИНДЕКСУ с помощью функции, определяемой пользователем (UDF)
Вы можете извлечь совпадающие значения из набора данных с помощью функции функция, определяемая пользователем (UDF) Из следующего изображения следует, что мы собираемся передать файл Студенческий билет и Экзаменационные оценки определенного студента, и функция выдаст нам Имя конкретного студента.
Давайте посмотрим, как этого добиться для Имя студента "Финн" с VBA .
Шаги:
- Как было показано ранее, открытые Редактор Visual Basic из Разработчик вкладка и Вставка a Модуль в окне кода.
- Затем, в окне кода, копия следующий код и паста это.
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 = "Данные не найдены" End Function
- Не беги этот код, сохранить это.
- Сейчас, вернуться к рабочему листу интерес. Выберите любую ячейку в котором вы хотите сохранить результат. В нашем случае это Ячейка F5 .
- В этой камере, написать UDF который вы только что создали в коде ( MatchByIndex ) и передать студенческий билет и экзаменационные оценки конкретного студента внутри круглых скобок функции.
Поскольку мы пытаемся извлечь имя " Финн" из его ID (105) и Маркс (84) , поэтому для нашего случая формула становится,
=MatchByIndex(105,84)
- Затем нажмите Войти .
Посмотрите на следующее изображение.
В Ячейка F5 мы успешно извлекли имя " Финн" просто проходя мимо его ID и Маркс внутри функции, которую мы создали в VBA код.
Объяснение кода VBA
Function MatchByIndex(x As Double, y As Double)
Создание новой функции и передача в нее переменных. Вы можете задать любое имя функции.
Const StartRow = 4
Наш ряд начинается с ряда номер 4. Вы должны указать номер ряда, с которого начинается ваш набор данных.
Dim EndRow As Long Dim iRow As Long
Определение переменных.
With Worksheets("UDF") EndRow = .Range("C:D").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Сначала определите рабочий лист для работы. Имя нашего листа - "UDF", вы должны задать имя в соответствии с вашей электронной таблицей. Затем начните поиск в диапазоне C:D от первого ряда, который мы определили, до последнего ряда.
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
Начните итерацию от первой строки к последней. Если первое значение, которое мы передадим в функцию, попадает в область C и если второе значение, которое мы передадим в функцию, попадает в столбец D столбца, то он вернет совпадение из столбца B столбец. В противном случае выйдите из функции, завершите все утверждения и перейдите к следующей строке.
MatchByIndex = "Данные не найдены" Конец функции
Если при выполнении предыдущее условие не выполняется, то будет возвращено сообщение "Data Not Found" и код выйдет из функции.
Читать далее: ИНДЕКС-МАТЧ с несколькими критериями для частичного текста в Excel (2 способа)
Критерии - 3: Реализация VBA для возврата значения MATCH из таблицы с несколькими данными в Excel
В этом разделе мы узнаем, как возвращает совпадающее значение по индексам из таблицы в MsgBox в VBA Excel.
Давайте посмотрим, как извлечь Маркс из таблицы, представленной в нашем наборе данных ( T способное имя: TableMatch ) определенного студента путем предоставления Имя и ID внутри кода. В нашем случае Имя и ID будет Финн и 105 соответственно.
Шаги:
- Во-первых, откройте Редактор Visual Basic из Разработчик вкладка и Вставка a Модуль в окне кода.
- Тогда, копия следующий код и паста его в окно кода.
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("ID студента").Index NameColumn = iTable.ListColumns("Имя студента").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
Теперь ваш код готов к выполнению.
- Позже, Запускайте этот код и посмотрите на следующее изображение, чтобы увидеть, что произошло в результате.
Как видно из приведенного выше изображения, есть Microsoft Excel всплывающее окно с сообщением, показывающее Марки: 84 из ID: 105 и Имя: Финн который мы предоставили внутри кода.
Объяснение кода 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
Определение переменных.
Set iBook = Application.ThisWorkbook Set iSheet = iBook.Sheets("Return Result") Set iTable = iSheet.ListObjects("TableMatch")
Установка имени листа и имени таблицы внутри переменных.
TargetID = 105 TargetName = "Finn" IdColumn = iTable.ListColumns("ID студента").Index NameColumn = iTable.ListColumns("Имя студента").Index MarksColumn = iTable.ListColumns("Экзаменационные оценки").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
Этот фрагмент кода сканирует от начала до конца подскрипт и если он находит совпадение заданного ID и имени в колонках поиска, то сохраняет результат и закрывает все утверждения, а также завершает итерацию и переходит к следующей части кода.
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
Выбрасывает результат в MsgBox.
Читать далее: Поиск и возврат нескольких значений, объединенных в одну ячейку в Excel
Заключение
В заключение, эта статья показала вам 3 различных метода, как выполнить ИНДЕКСНОЕ СРАВНЕНИЕ на основе нескольких критериев в Excel с помощью макрос VBA Я надеюсь, что эта статья была очень полезна для вас. Не стесняйтесь задавать любые вопросы по теме.