轻松地引用偏移量中的单元格

我有一个很多公式的工作表,上面或右边是一个单元格。 如果我使用CTRL-D来填充行,则公式会被正确更新(因此,在B2中,= B1 + A2在B3中变成= B2 + A3)。 但是当我在行之间插入时,事情会变得混乱(所以在B3之上插入一行,将它移到B4使其公式变成= B2 + A4,这不是我想要的)

所以我想创build一个CellAbove和CellRight公式(所以我可以写= CellAbove()+ CellRight())。 我怎样才能做到这一点?

我的尝试:

Function CellAbove() CellAbove = [Address(Row() - 1, Column())].Value End Function 

不起作用。

更新:下面的函数工作,但具有它的单元格不会更新:

 Function CellAbove() CellAbove = Range([Address(Row() - 1, Column())]) End Function 

所以如果A1有2,A2有= CellAbove(),那么A2将显示2.但是,如果现在我把A1改为3,那么A2仍然会显示2

由于你的函数起作用,而且你似乎只需要在插入行时重新计算。 你说:

“但是具有它的单元不被更新”

用户定义的函数默认是不可变的,所以它们不会自动重新计算。 你可以改变你现有的function。

 Function CellAbove() Application.Volatile (True) CellAbove = Range([Address(Row() - 1, Column())]) End Function 

这可能会影响性能,但似乎是你所要求的。

= INDIRECT(“R”&ROW() – 1&“C”&COLUMN(),FALSE)将作为一个函数。

假设你在B2上。 然后括号内的位将评估为R1C2。 INIDRECT函数然后将计算第1行第2列(您需要FALSE以确保您使用单元格地址的R1C1样式)。

我相信你可以做一些简单的使用:

OFFSET(CurrentCell,-1,0)

但我不明白你怎么可以参考当前的细胞。

跟进我的评论。 我们不需要这个:)的vba

插入空行后

步骤1

将公式从B2下拉到B3或者简单地selectB3并按CTL D

第2步

select单元格B3 。 通过双击单元格的右下angular进行自动填充。

在这里输入图像说明

您可以使用内置的Excel函数(如INDIRECT,ADDRESS,ROW和COLUMN)来执行此操作,如…

 =INDIRECT(ADDRESS(ROW()-1,COLUMN())) 

…对于上面的单元格,或…

 =INDIRECT(ADDRESS(ROW(),COLUMN()+1)) 

…右边的单元格

另一种使用内置function的方法是使用OFFSETfunction。 例如,在单元格B2中,可以input公式…

 =OFFSET(B2,-1,0) 

…对于上面的单元格,或…

 =OFFSET(B2,0,1) 

…右边的单元格 它看起来像一个循环引用,但它不是,因为你没有引用同一个单元格的值,只有它的地址。

无论哪种方式,您或多或less都会失去使用“跟踪依赖”和“跟踪先例”function的能力,因为每个单元基本上只引用自身。

你的function

 Function CellAbove() CellAbove = Range([Address(Row() - 1, Column())]) End Function Function CellRight() CellRight = Range([Address(Row(), Column() + 1)]) End Function 

可能被称为

 Function test000000() ActiveCell = CellAbove + CellRight End Sub