【问题标题】:How to preserve a formula's reference to a worksheet when the worksheet is deleted and replaced?删除和替换工作表时如何保留公式对工作表的引用?
【发布时间】:2011-05-03 12:35:51
【问题描述】:

我是一个应用程序的作者,该应用程序在打开 Excel 工作簿之前会删除并重新创建一些工作表,例如下例中的“Sheet1”。

同一工作簿中的其他工作表(例如 Sheet2)可能具有引用替换工作表的公式,如下所示:

=IF('Sheet1'!A9="","",'Sheet1'!A9)

不幸的是,上面公式中对 Sheet1 的引用在替换工作表时被破坏,变为

=IF(#Ref!A9="","",#REF!A9)

谁能想出一种方法来编写这个公式,这样它就不会失败?例如,它可以从 Sheet2 中的隐藏单元格中获取工作表的名称或其他什么?

我只是对 Excel 公式了解得不够多,不知道有什么可能性。

TIA

【问题讨论】:

    标签: excel worksheet-function


    【解决方案1】:

    使用间接寻址和命名范围

    1) 使用填充了文本“SheetN!”的幻像单元(即 Z1...Zn)对于您要删除的每张工作表。

    2) 为这些表中的所有外部可寻址单元格和范围定义范围名称

    3) 在您的公式中,将引用替换为“间接”和命名范围的 LITERAL。

    示例:

    替换

        =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 中)命名范围。

    编辑:回答您对名称中包含空格的表格的评论

    在这种情况下,你需要额外的 :)

    使用这个:

     =INDIRECT("_'_" & Z1& "_'_!_" & "caca")  
    

    应该删除“_”,因为我将它们插入那里只是为了方便单引号和双引号的可视化。

    在单元格 Z1 中输入不带引号和感叹号的 Sheet1 的名称(因为它已经在公式中)。

    HTH!

    【讨论】:

    • 贝利撒留:很好的答案。谢谢!快速提问:我有一个工作表,其名称中嵌入了空白,而不是“Sheet1”。在您的第一个示例中,我无法弄清楚如何在 Z1 的内容中使用引号。有什么帮助吗?
    • 非常感谢!对此,我真的非常感激。我投票赞成你的答案,因为你的跟进和有用的下划线使你的答案可读!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多