Пользовательская функция не работает для других листов - PullRequest
0 голосов
/ 22 апреля 2020

введите описание изображения здесь Как обойти эту ситуацию?

Как вы знаете, формула VLOOKUP в EXCEL показывает первое значение, найденное в таблице. Иногда вам нужно получить все значения из таблицы в виде списка. Поэтому я подумал, что должна быть такая функция (формула): = VLOOKUP_NUMBER_VALUE (DesiredValue, ColumnWhereWeSearch, ColumnFromWhereWeWantToGet, Number)

    Function VLOOKUP_NUMBER_VALUE(DesiredValue As Variant, ColumnWhereWeSearch As Range, ColumnFromWhereWeWantToGet As Range, Number As Integer)

VBA Code:
On Error GoTo VLOOKUP_NUMBER_VALUE_ERR
n = 0
'we start to loop column if there is our desired value
For Each cell In ColumnWhereWeSearch
'we don't want to check up empty cells
If cell <> "" Then
    'if the cell has our desired value we number it using n variable
    If cell = DesiredValue Then n = n + 1
        'if this n equals our Number in function arguements we need to get row number in cell in order to find the value in the column where we want to get lookup
        If n = Number And cell = DesiredValue Then RowNumber = cell.Row
End If
Next cell
'here we just get column number our third variable
ColumnNumberResult = ColumnFromWhereWeWantToGet.Column
'Result:
VLOOKUP_NUMBER_VALUE = Cells(RowNumber, ColumnNumberResult)

Exit Function

VLOOKUP_NUMBER_VALUE_ERR:
'this row gives "-" when error occurs
VLOOKUP_NUMBER_VALUE = "-"
End Function

проблема в том, что эта функция не работает, когда я использую в диапазонах аргументов с других листов, книг. и я примерно понимаю почему. получается, что я не указал имя документа, лист в аргументах или в функции, и мне нужно как-то получить его внутри функции.

1 Ответ

0 голосов
/ 22 апреля 2020

Существует неявное ActiveSheet в

VLOOKUP_NUMBER_VALUE = Cells(RowNumber, ColumnNumberResult)

. Чтобы исправить, используйте ColumnWhereWeSearch.Parent, то есть рабочую таблицу, на которой находится рассматриваемый диапазон:

VLOOKUP_NUMBER_VALUE = ColumnWhereWeSearch.Parent.Cells(RowNumber, ColumnNumberResult)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...