当删除行时,防止Excel删除公式中的引用

本文关键字:引用 删除 Excel 删除行 防止 | 更新日期: 2023-09-27 18:16:41

我有一个带有工作表Sheet1Sheet2的Excel工作簿,其中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#互操作:

thisRange["a1"].EntireRow.Delete()

则所有的公式被设置为错误,例如=Sheet1!#REF!

是否有一种方法可以在删除行后保留公式中的现有引用?我想我可以把所有的公式复制到一个数组中,然后再复制到工作表中,但我希望它们一开始就不会消失。

当删除行时,防止Excel删除公式中的引用

您要做的是在Sheet2中使用INDIRECT引用。它们保持不变,并且不会在单元格或行被移动或删除时发出警告,它们将可靠地保持指向相同的引用。

那么在您的示例中,您的Sheet2值变为:

+-----------+------------------------+
|  address  |          value         |
+-----------+------------------------+
| Sheet2!A1 | =INDIRECT("Sheet1!A1") |
| Sheet2!B1 | =INDIRECT("Sheet1!B1") |
| Sheet2!C1 | =INDIRECT("Sheet1!C1") |
+-----------+------------------------+

我将把它留给读者去玩,使参考文本更动态(例如"Sheet1!A"&ROW())。见https://superuser.com/questions/316239/how-to-get-the-current-column-name-in-excel

我不知道有什么设置能让这种情况不发生。

话虽如此,我通常在类似场景中使用的方法是在删除命令期间使公式不再是公式。如果在Sheet2的公式前添加一个文本字母,完成删除函数,在Sheet2中删除公式前的文本字母,则函数仍然可以工作

= Sheet1 !A1

= Sheet1 !A1

= Sheet1 !A1

这可以用查找-替换命令来完成,如果您手动删除行,或者如果编程一个函数,我会查看范围内的For Each单元格,以连接和"然后使用length of string -1 .