
Я пытаюсь создать простой макрос, который должен проходить по заданному диапазону ячеек и возвращать ячейку, следующую за ячейкой, соответствующей некоторому содержимому.
На некоторых форумах я нашел строку, которая, как предполагается, работает для объектов ячеек:
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 использовалась. Если вам нужно знать, на какие ячейки ссылаются, а не значения в ячейках, передайте диапазон как строку, проанализируйте строку и получите значения в указанных ячейках.
Так что то, чего я хочу добиться, невозможно. :(