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