1

我有一个带有工作表的 Excel 工作簿Sheet1Sheet2其中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 |
+-----------+------------+

如果我从 中删除第 1 行Sheet1,请使用以下 C# 互操作:

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

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

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

4

2 回答 2

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

于 2013-12-16T09:48:09.877 回答
1

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

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

=工作表1!A1

a=Sheet1!A1

=工作表1!A1

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

于 2013-10-08T20:29:19.087 回答