Excel:获取一个公式中引用的地址,并在另一个公式中使用它

有没有办法在Excel中获取引用单元格的地址,以便可以在另一个公式中使用它?

我有一个单元格引用另一个内容B1 = Address!A4。 在另一个单元格中,我想获取B1中包含的单元格引用,并使用它来获取单元格中相对于引用单元格的值。 我不想search单元格Address!A4的值,因为我要search的范围可能包含多个匹配项。 我想要一个参考单元格。

有没有办法做到这一点?

例如:

一行单元格包含值A1 =“123 E 400 S”, B1 =“123”, C1 =“400”
一个单元格包含对这些单元格之一的引用: G8 = B1

所以在单元格G8中显示值“123”。 我想在单元格F8中使用G8中的引用作为“指针”或指向B1的索引,然后我可以在A1上进行偏移。

我想这样做F8 = OFFSET(CELL(“contents”, G8 ),0,-1),这将导致值“123 E 400 S”被显示。 可悲的是,这不行,我得到一个#REF! 错误。

这可能看起来像INDEX,VLOOKUP,MATCH等的候选人,但我不想尝试定义单元格的范围,它可能会改变。 即使我要定义它,潜在的searchstring“123”也可以在范围内复制。

看来我应该能够使用我已经知道的参考,去那个细胞,然后与细胞相关的工作。

有任何想法吗? 谢谢您的帮助。

编辑: 一个更简单的方法

将单元格地址放在某个单元格中可能比较容易,并且单元格B1和C1中使用INDIRECT ,则不需要下面描述的额外function!

间接


VBA方法:用户定义的函数

如果您可以将工作簿保存为已启用macros的.xlsm则可以使用用户定义的函数来获取公式,并提取单元格地址。 将其添加到工作簿的VBA编辑器中的模块(按Alt + F11 ,插入>模块)。

 Function GetFormula(rng As Range) As String GetFormula = rng.Formula End Function 

使用示例,请注意C1中的公式是=GetFormula ,但是显示的值是B1中的公式:

获得功能

然后,您可以使用单元格公式RIGHT ,或者直接在VBA中使用另一个函数。 在VBA中做这件事的好处是你做的任何parsing都会更清晰,你可以尽可能的使用RegExp。

 Function GetEndRange(rng As Range) As String Dim str As String str = rng.Formula ' Get the characters to the right of an exclamation point ' Assumes formula ended in an address, could do more complicated parsing here str = Right(str, Len(str) - InStr(str, "!")) GetEndRange = str End Function 

使用:

结束范围

现在您可以使用单元格公式(或更复杂的macros)来访问偏移单元格。 这是细胞公式的方式来做到这一点:

 =OFFSET(INDIRECT("Address!" & GetEndRange(B1),TRUE),1,0) ' Evaluated as: ' =OFFSET(INDIRECT("Address!A4",TRUE),1,0) ' =OFFSET(Address!$A$4,1,0) ' =Address!$A$5