当行被删除时,防止Excel删除公式中的引用
我有一个Excel工作簿与工作表Sheet1
和Sheet2
,其中Sheet2
具有公式引用Sheet1
值,如下所示:
+-----------+------------+ | address | value | +-----------+------------+ | Sheet1!A1 | 1 | | Sheet1!B1 | 3 | | Sheet1!C1 | 5 | | Sheet2!A1 | =Sheet1!A1 | | Sheet2!B1 | =Sheet1!B1 | | Sheet2!C1 | =Sheet1!C1 | +-----------+------------+
如果从Sheet1
删除第1行,请使用以下C#interop:
thisRange["a1"].EntireRow.Delete()
那么所有的公式被设置为错误,例如=Sheet1!#REF!
。
一旦行被删除,有没有办法保留公式中现有的引用? 我想我可以将所有的公式复制到一个数组中,然后将它们复制到表单中,但理想情况下我希望它们不会消失。
你想要做的是在Sheet2中使用INDIRECT引用。 这些保持不变,不要抱怨,如果一个单元格或行被移动或删除,他们将可靠地保持指向相同的参考。
所以在你的例子中,你的Sheet2值变成:
+-----------+------------------------+ | address | value | +-----------+------------------------+ | Sheet2!A1 | =INDIRECT("Sheet1!A1") | | Sheet2!B1 | =INDIRECT("Sheet1!B1") | | Sheet2!C1 | =INDIRECT("Sheet1!C1") | +-----------+------------------------+
我将把它留给读者来使参考文本更具dynamic性(例如“Sheet1!A”和ROW())。 见https://superuser.com/questions/316239/how-to-get-the-current-column-name-in-excel
我不知道这种情况不会发生。
就这点而言,我通常用于类似场景的工作是在删除命令期间使公式不再使用公式。 如果在Sheet2
的公式之前添加一个文本字母,请完成删除function,在Sheet2
公式之前删除文本字母,然后这些函数将仍然有效
工作表Sheet1 =!A1
一个工作表Sheet1 =!A1
工作表Sheet1 =!A1
这可以通过查找replace命令来完成,如果你手动删除行或者如果编程一个函数,我会查看一个范围内的For Each
单元格在公式前连接一个“a”,然后通过使用长度为string-1
。