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

时间:2013-05-31 21:17:35

标签: c# excel excel-formula

我有一个包含工作表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#interop:

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

然后将所有公式设置为错误,例如=Sheet1!#REF!

删除行后,有没有办法保留公式中的现有引用?我想我可以将所有公式复制到一个数组中,然后将它们重新复制到工作表中,但我最好还是希望它们不会在第一时间消失。

2 个答案:

答案 0 :(得分:6)

您要做的是在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

答案 1 :(得分:1)

我不知道允许这种情况发生的设置。

话虽如此,我通常用于类似场景的工作是在删除命令期间使公式不再是公式。如果在Sheet2中的公式之前添加文本字母,请完成删除功能,删除Sheet2中公式之前的文本字母,然后函数仍然有效

  

= Sheet 1中!A1

     

α= Sheet 1中!A1

     

= Sheet 1中!A1

如果您手动删除行或者编程函数我可以查看范围内的For Each单元格以在公式之前连接“a”然后修剪它,可以使用Find-Replace命令完成通过使用字符串-1的长度退出。