我是一个应用程序的作者,该应用程序在打开 Excel 工作簿之前会删除并重新创建一些工作表,例如下面示例中的“Sheet1”。
同一工作簿中的其他工作表(例如 Sheet2)可能具有引用替换工作表的公式,如下所示:
=IF('Sheet1'!A9="","",'Sheet1'!A9)
不幸的是,当更换sheet时,上面公式中对Sheet1的引用就被破坏了,变成了
=IF(#Ref!A9="","",#REF!A9)
有人能想出一种方法来编写这个公式,这样它就不会失败吗?例如,它可以从 Sheet2 中的隐藏单元格或其他内容中获取工作表的名称?
我只是对 Excel 公式了解不够,不知道有哪些可能性。
TIA
最佳答案
使用间接寻址和命名范围
1) 使用填充有文本“SheetN!”的虚拟单元(即 Z1...Zn)对于要删除的每张工作表。
2) 为这些工作表中的所有外部可寻址单元格和范围定义范围名称
3) 在公式中,将引用替换为“间接”和命名范围的文字。
示例:
替换
=Sum(Sheet1!A:A)
与
=SUM(INDIRECT(Z1&"caca"))
其中“caca”是 Sheet1 中定义为 A:A 的命名范围,Z1 包含“Sheet1!”
另一个例子:
替换
=Sheet1!A1+Sheet1!A2
与
=INDIRECT(Z1&"NamedRangeForA1")+INDIRECT(Z1&"NamedRangeForA2")
现在您可以删除 Sheet1,而不会出现引用问题。
当您添加新的 Sheet1 时,您应该重新创建(在 VBA 中)命名范围。
编辑:回答您对名称中带有空格的表格的评论
在这种情况下,你需要额外的 fu :)
使用这个:
=INDIRECT("_'_" & Z1& "_'_!_" & "caca")
应该删除“_”,因为我将它们插入那里只是为了方便单引号和双引号的可视化。
在单元格 Z1 中输入 Sheet1 的名称,不带引号和感叹号(因为它已在公式中)。
呵呵!
关于excel - 当工作表被删除和替换时,如何保留对工作表的公式引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4070930/