将excel 2013中的行添加到一组数据会使另一组公式不正确

时间:2015-08-27 15:01:54

标签: excel vba excel-vba

我所拥有的是excel中工作表上数据的后端,此后端只是A列中的1列数据。

我有5张必须使用以下公式简单地引用这些数据:

='Sheet1'!A2
='Sheet1'!A3

等等

当我在工作表1中插入一行新数据时,它会在其他工作表上混淆公式 - 就好像其他工作表无法读取已在工作表1中输入新的数据行。例如,说我在第1页的A2和A3之间添加了一个新行,其他工作表不会选择它并保留相同的数据,尽管现在而不是

='Sheet1'!A2
='Sheet1'!A3

而现在的公式如下:

='Sheet1'!A2
='Sheet1'!A4

它应该保持相同的公式,并应阅读:

='Sheet1'!A2
='Sheet1'!A3
='Sheet1'!A4

有没有办法自动更正?

1 个答案:

答案 0 :(得分:1)

您正在寻找的内容的解释

您误解了Excel如何处理单元格引用的基石。

不要将每个单元格简单地视为由其行和列位置命名的网格,而应将每个单元格视为唯一的数据。首先,左上角的单元格(我们将给出唯一的ID单元格1)位于A1。这是它的位置,而不是它的ID。如果我们在cell1的左侧插入一个新列,则cell1本身已沿网格移动。所以现在cell1恰好位于B1,而不是A1。

这称为直接参考 - 我们通过说=' Sheet1'!A2直接引用特定的单元格。看起来我们正在说"拉出位于A2"但实际上它意味着"当我第一次输入这个公式时,找到当前位于A2的单元格的唯一ID。无论细胞如何从行或列的变化中移动,总是参考那个细胞"。因此,当您注意到时,公式会移动。

为了避免这种情况(当然,当你想要避免这种情况时,你会看到这种情况)你需要使用间接引用。间接引用是一种通过其Grid位置永久引用单元格的方法,而不是通过其唯一ID(我们将忽略的间接引用的其他用途)。

做你想要的事情就像说:

一样简单
=INDIRECT("'Sheet1'!A2")

无论Cell A2如何移动,此公式将始终指向基于Grid的位置,而不是唯一的单元ID。

编辑以说明您确实需要更改数百个单元格

您实际上可以将公式构建为INDIRECT,它将根据计算引用特定单元格。让我们首先假设您的所有单元格都在A列中,并且您始终希望一张纸中的A1引用另一张纸中的A1,而A5则引用A5。这看起来如下:

=INDIRECT("'Sheet1'!A"&ROW())

ROW()为您提供单元格所在公式的行号。因此,在第1行中,这将成为A1。在第5行,这变成了A5。

现在让我们假设您想要在从A1到D500的所有单元格中使用此功能。在这里,我们显然不能硬编码" A"。所以我们将使用COLUMN()函数,就像上面的ROW()函数一样。但是,请注意COLUMN()返回列 number ,我们通常会引用列 letter 。这可以通过两种方式修复 - 将数字转换为字母[可以完成,但通常更长]或使用INDIRECT允许的R1C1引用样式。

R1C1是标准A1参考方法的替代方案。例如,R5C4说:'细胞5行向下,4个细胞向右)。因此,使用INDIRECT函数,它将如下所示:

=INDIRECT("'Sheet1'!R"&ROW()&"C"&COLUMN,FALSE)

添加",FALSE"在INDIRECT的后面,我们告诉Excel使用R1C1引用方法。