Как получить диапазон ячеек в качестве аргумента функции

Как получить диапазон ячеек в качестве аргумента функции

Я пытаюсь создать простой макрос, который должен проходить по заданному диапазону ячеек и возвращать ячейку, следующую за ячейкой, соответствующей некоторому содержимому.

На некоторых форумах я нашел строку, которая, как предполагается, работает для объектов ячеек:

someCell.Offset(0,colIndex)

Но в результате отладки я вижу, что входные данные из выборки представляют собой набор Variant/String, а не объект «cell».

Есть ли способ для моей функции получить Диапазон ячеек вместо Вариантов/Строк?

Также мой полный код:

Function RVLOOKUP(target, criteriaCellRange, colIndex)

    Dim found as Boolean
    Dim resultCell as Variant

    For Each cell In criteriaCellRange
        matchPosition = instr(target,cell)
        If matchPosition > 0 Then
            found = True
            resultCell = cell
            Exit For
        end if
    Next cell

    If found Then
        ' Here resultCell seems to be just a String not an actual cell object
        RVLOOKUP = resultCell.Offset(0,colIndex)
    else
        RVLOOKUP = "#NoMatch"
    end if

End Function

ОБНОВЛЕНО: Предполагается, что код находит ячейку из criteriaCellRange, которая является точным или частичным совпадением текста в целевой ячейке, и возвращает ячейку с горизонтальным смещением colIndex от соответствующей ячейки из criteriaCellRange. Так что по сути это VLOOKUP, который также соответствует частичному тексту.

Так...ЗДЕСЬу нас та же проблема, и ответ там подтверждает мои подозрения:

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

Кстати, я использую Libreoffice 5.4.4.2.

решение1

Всего пара изменений:

Function RVLOOKUP(target, criteriaCellRange, colIndex)

    Dim found As Boolean
    Dim resultCell As Range

    For Each cell In criteriaCellRange
        matchPosition = InStr(cell, target)
        If matchPosition > 0 Then
            found = True
            Set resultCell = cell
            Exit For
        End If
    Next cell

    If found Then
        ' Here resultCell seems to be just a String not an actual cell object
        RVLOOKUP = resultCell.Offset(0, colIndex)
    Else
        RVLOOKUP = "#NoMatch"
    End If

End Function

Я перевернул InStr()аргументы и resultCellсделалДиапазон

решение2

ИзОО документация:

Аргументы передаются как значения

Аргументы, переданные макросу из Calc, всегда являются значениями. Невозможно узнать, какие ячейки используются, если таковые имеются. Например, =PositiveSum(A3) передает значение ячейки A3, а PositiveSum не может узнать, что ячейка A3 использовалась. Если вам нужно знать, на какие ячейки ссылаются, а не значения в ячейках, передайте диапазон как строку, проанализируйте строку и получите значения в указанных ячейках.

Так что то, чего я хочу добиться, невозможно. :(

Связанный контент