VBA - поиск соответствия с несколькими параметрами - PullRequest
0 голосов
/ 08 мая 2018

У меня есть несколько макросов, которые выполняют различные задачи, и кажется довольно бессмысленным, что последний шаг процесса требует, чтобы пользователь вручную вводил формулу, поэтому вот сценарий:

У меня есть 2 таблицы:

  1. Консолидированный лист - содержит номер сотрудника и сведения о сотруднике (см. Изображение ниже)

    enter image description here

  2. Сводная ведомость - содержит только 3 столбца; AppName, EmpNum, Status (см. Изображение ниже)

    Примечание. В настоящее время нет данных ни на одном из этих листов, а на сводном листе я создаю таблицу из данных, чтобы формула работала

    enter image description here

На сводном листе в конце столбца «Электронная почта руководителя» есть еще несколько столбцов, содержащих названия приложений (см. Изображение ниже)

enter image description here

Первоначально идея состояла в том, чтобы найти номер сотрудника и имя приложения с помощью приведенной ниже формулы, а затем скопировать статус в соответствующую ячейку - но эта формула не работает и требует, чтобы пользователь вставил формулу вручную в каждая ячейка под каждым именем приложения.

Формула:

=IFERROR(INDEX(Table2[Status],SUMPRODUCT((Table2[App Name]=L$1)*(Table2[Employee Number]=$A2)*(ROW(Table2[Status])))-1,1),"")

Теперь то, что я хочу сделать, это относительно одно и то же, но с двумя отличиями:

  1. Я не хочу, чтобы статус отображался в ячейке, в которую помещена формула. - Если есть совпадение, тогда должно отображаться «MATCH»

    и если совпадений нет, то ячейка должна быть пустой

  2. Мне нужно, чтобы эта формула была в макросе, который находит «lastRow» и заполняет столбцы от App1 - до последнего AppName и до «lastRow»

1 Ответ

0 голосов
/ 11 мая 2018

Я получил ответ на этот вопрос от пользователя Subodh Tiwari (Neeraj):

https://www.experts -exchange.com / вопросы / 29098511 / VBA-ВПР-С-Multiple-Parameters.html # acceptAnswerByMember

Пример рабочей книги прилагается к сообщению в этой ссылке.

Вот полный код:

Sub PlaceFormula()
Dim ws As Worksheet
Dim lr As Long
Dim lc As Long

With Application
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
    .EnableEvents = False
End With

Set ws = Sheets("Main")
lr = ws.Cells(Rows.Count, 1).End(xlUp).Row
lc = ws.Cells(1, Columns.Count).End(xlToLeft).Column

ws.Range("B2", ws.Cells(lr, lc)).Formula = "=IF(ISNUMBER(MATCH($A2&B$1,INDEX(tStatus[[Employee Number]:[Employee Number]]&tStatus[[Wk Number]:[Wk Number]],),0)),""Match"","""")"
ws.Range("B2", ws.Cells(lr, lc)).Value = ws.Range("B2", ws.Cells(lr, lc)).Value

With Application
    .Calculation = xlCalculationAutomatic
    .ScreenUpdating = True
    .EnableEvents = True
End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...