我有一个包含工作表Sheet1
和Sheet2
的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!
。
删除行后,有没有办法保留公式中的现有引用?我想我可以将所有公式复制到一个数组中,然后将它们重新复制到工作表中,但我最好还是希望它们不会在第一时间消失。
答案 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
的长度退出。