Excel INDEX + MATCH (другой лист с пользовательской функцией) - PullRequest
0 голосов
/ 27 февраля 2019

Решено, я допустил ошибку "МАТЧ", спасибо всем!

У меня есть неопределенное количество листов каждый раз с неопределенным именем, но мой целевой листпоиск всегда является третьим последним

, поэтому в VBA я сделал этот UDF:

Function SHEETNAME() As String

    Dim L As Long
    L = ThisWorkbook.Worksheets.Count
    SHEETNAME = Sheets(L - 2).Name

End Function

, поэтому вызов = SHEETNAME () в моей электронной таблице всегда будет возвращать имя моей целевой рабочей таблицы

тогда, к сожалению, точное значение, которое мне нужно, на 1 строку ниже того, что я могу достичь с помощью VLookup (3-й столбец)

=VLOOKUP($K$2,INDIRECT("'" & sheetname() & "'!"&"A2:X30"), 3, 0) <--- I need 1 row below this result

, поэтому я преобразовал формулу в INDEX + MATCH

=INDEX(INDIRECT("'" & sheetname() & "'!" & "A2:X30"),MATCH($K$2,INDIRECT("'" & sheetname() & "'!" & "A2:A30"),0)+1,3)

каким-то образом результат MATCH ($ K $ 2, INDIRECT ("'" & sheetname () & "'!" & "A2: A30"), 0) из F9 равен N / A, почему ....

1 Ответ

0 голосов
/ 27 февраля 2019

От A: X вы хотите получить значение третьего столбца в вашем VLOOKUP, поэтому это INDEX (C: C, ...) или INDEX (A: X, ..., 3).VLOOKUP всегда использует первый столбец для поиска, поэтому он будет соответствовать (K2, A: A, 0).

=INDEX(INDIRECT("'" & sheetname() & "'!A2:X30"), MATCH($K$2, INDIRECT("'" & sheetname() & "'!A2:A30"), 0)+1, 3)

Не усложняйте НЕПРАВИЛЬНЫЕ строки с $.Ничто не изменит строку.

...