【发布时间】:2021-11-12 03:18:01
【问题描述】:
我在 Calc 中使用 VLOOKUP,如下所示:
VLOOKUP(B11,G2:J7,4,0)
通常,当我们任何人使用它时,我们希望获取此函数找到的单元格中的值。在这种情况下,而不是值,我想获取一个包含单元格地址的字符串,或者该单元格的行和列。例如,如果我在单元格 J5 中有一个 30.14 的双精度浮点值,这就是答案,而不是让它返回 30.14,我希望它返回类似“J5”或 9,4 之类的东西或其他方式让我在宏中读取结果。
我尝试使用 =ADDRESS() 和 =CELL("address", ),但出现错误(=CELL() 给我 '#REF!')。
编辑:我使用这个例程作为 VLOOKUP 的包装器,带有一个浮点数表(这就是它返回 DOUBLE 而不是将单元格值作为字符串或其他东西获取的原因)。我所要做的就是将我想要从中获取数据的列传递给它:
Function getLookup(valColumn as Integer) as Double
oDoc = ThisComponent
oSheet = oDoc.Sheets (workSheet)
rangeInfo = lookupTopLeft + ":" + lookupBottomRight
cellRange = oSheet.getCellRangeByName(rangeInfo)
oCell = oSheet.GetCellByPosition(dataCellColumn, dataCellRow)
searchValue = oCell.getString()
Mode = 0
svc = createUnoService( "com.sun.star.sheet.FunctionAccess" )
args = Array(searchValue, cellRange, valColumn, Mode)
getLookup = svc.callFunction("VLOOKUP", args)
End Function
注意我在这里使用了一些局部变量。它们是私有的,仅用于模块,因此我在设计电子表格时不必在多个位置更改单元格引用。 “lookupTopLeft”和“lookupBottomRight”是“G2”和“J7”,我正在使用的数据的左上角和右下角单元格。 “dataCellColumn”和“dataCellRow”是我在 VLOOKUP 中使用的键的源的列和行坐标。
(@JohnSUN,我认为这可能会根据您在某处提供的答案进行修改。)
我希望能够执行类似的包装例程,该例程将返回单元格的列和行,而不是单元格中的值。
【问题讨论】:
-
在 excel 中它应该是:
=CELL("address", INDEX(G2:J7, MATCH(B11, G2:G7, 0), 4))。这给了你什么? -
试试 MATCH() 就像
=ADDRESS(ROW(J2)+MATCH(B11;G2:G8;0)-1;COLUMN(J2);4) -
@JohnSUN 是的,完全一样。此外,由于它使用了我已经在宏中为 VLOOKUP 函数指定的行和列,因此我可以使用相同的变量。如果你把它作为答案,我会投票并选择它。
-
-
在宏中?哦,对不起,我没有仔细阅读问题。如果我们谈论的是宏,那么以文本形式获取单元格地址应该会容易得多。您能否编辑您的问题并添加有关您将在其中使用单元格文本地址的代码的信息?
标签: spreadsheet libreoffice calc