excel - 当工作表被删除和替换时,如何保留对工作表的公式引用?

标签 excel worksheet-function

我是一个应用程序的作者,该应用程序在打开 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/

相关文章:

excel - WinHttpRequest 在不同文件中使用代码时停止工作

excel - 列中最后一个非空单元格

Excel复制公式问题

Excel 图表 - 动态设置系列结束

excel - Excel VBA 中的 While 循环问题

Excel.Application.Cells.SpecialCells(xlCellTypeLastCell) 返回工作表的底部,而不是最后一个数据单元格

excel - 跨多个工作簿对同一单元格求和

excel - ListObject 表上的两个过滤器

vba - excel中如何统计不同字体颜色的文本

excel - 计算满足特定条件的 Excel 电子表格中的唯一行