Преобразование совпадения индекса в динамический код VBA - PullRequest
0 голосов
/ 31 января 2019

У меня есть уравнение совпадения индекса, которое я пытаюсь преобразовать в код VBA:

=IFERROR(INDEX(Comments!$C$2:$C$100,MATCH(C8,Comments!$A$2:$A$100,0)),"COMMENT REQUIRED")

Вот что я придумала:

DestinationSheet.Cells(DestinationRow, 8).Value = Application.WorksheetFunction.Index(Sheets("Comments").Range("$C$2:$C$100"), Application.WorksheetFunction.Match((DestinationSheet.Range(DestinationRow, 3)), Sheets("Comments").Range("$A$2:$A$100"), 0), 1)

Однако яполучаю ошибку.По сути, первая формула находит значение, расположенное на другом листе, на основе значений в столбце C.

Для второго бита кода я пытаюсь просмотреть те же значения на другом листе, но на основезначение в столбце 3 строки, определенной как DestinationRow.Я делаю это в коде VBA, потому что номера строк сопоставляемых индексов неизвестны, поэтому я должен использовать DestinationRow, чтобы указать строку, а не жестко кодировать значения, как в первой формуле.

1 Ответ

0 голосов
/ 31 января 2019

Похоже, что VLOOKUP будет менее сложным:

Dim m
With DestinationSheet.Rows(DestinationRow)
    m = Application.VLookup(.Cells(3).Value, Sheets("Comments").Range("$A$2:$C$100"), 3, False)
    .Cells(8).Value = IIf(IsError(m), "COMMENT REQUIRED", m)
End With

Примечание: есть два разных способа использования функций рабочего листа в VBA

Этот:

Application.Worksheetfunction.VLookup(...)

вызовет ошибку времени выполнения, если нет совпадения, которое вам нужно будет отловить и обработать.

Этот:

Application.VLookup(...)

будет не поднятьошибка времени выполнения, но вместо этого возвращает значение ошибки, которое вы можете проверить на использование IsError()

...