我正在尝试制作一个简单的宏,它应该循环遍历给定的单元格范围并返回与某些内容匹配的单元格旁边的单元格。
在一些论坛上,我发现了一行应该适用于单元格对象的内容:
someCell.Offset(0,colIndex)
但从调试中我可以看到,来自选择的输入数据是一组 Variant/String,而不是“单元格”对象。
有没有办法让我的函数获取单元格范围而不是变量/字符串?
还有我的完整代码:
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中找到一个与目标单元格中的文本完全或部分匹配的单元格,并返回与criteriaCellRange中匹配单元格水平偏移量为colIndex的单元格。所以基本上是一个也匹配部分文本的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
来自OO 文档:
参数作为值传递
从 Calc 传递给宏的参数始终是值。无法知道使用了哪些单元格(如果有的话)。例如,=PositiveSum(A3) 传递单元格 A3 的值,而 PositiveSum 无法知道使用了单元格 A3。如果您必须知道引用了哪些单元格而不是单元格中的值,请将范围作为字符串传递,解析字符串,然后获取引用单元格中的值。
所以我想要实现的目标是不可能的。:(