将FormulaArray设置为Formula会跳过每隔一行和每列

时间:2014-11-19 16:29:56

标签: excel vba excel-vba excel-formula excel-2007

输入公式的一种非常快捷的方法是这样的:

Range("E5:H10").Formula = "=A1"

列和行引用进行调整,例如,此代码在单元格H10中输入的公式为“= D6”。

但是,这对数组公式不起作用:

Range("E5:H10").FormulaArray = "=A1"

将数组公式{= A1}放在每个单元格中;没有对行或列的调整。

当然你可以循环遍历所有单元格并在每个单元格中输入一个独特的数组公式,但这并不快。

所以我尝试了这个:

Range("E5:H10").Formula = "=A1"
Range("E5:H10").FormulaArray = Range("E5:H10").Formula

但结果令人惊讶 - 引用会跳过每隔一行和每隔一列;例如:

- F5中的公式是{= C1}而不是预期的{= B1}和

- D6中的公式为{= A3}而不是预期的{= A2}和

- H10中的公式为{= G11},而不是预期的{= D6}。

WTF ??为什么它会像那样跳过行和列?顺便说一下,我在Excel 2007 SP3中。

现在我正在这样做,这是我发现最快的方法:

Range("E5").FormulaArray = "=A1"
Range("E5:H10").FillDown
Range("E5:H10").FillRight

这有效,但可能比直接方式慢。那么 - 为什么将FormulaArray属性设置为Formula属性会跳过引用的行和列,如上所示?

1 个答案:

答案 0 :(得分:0)

相对于您正在填充的范围的左上角单元格评估A1公式。因此A1在E5中工作正常,但是B1从E5开始上升4并且离开3,因此输入F5的公式指的是上升4和左3的单元,即C1。这对其他细胞重复。简单的解决方案是使用:

Range("E5:H10").FormulaArray = Range("E5:H10").FormulaR1C1

因为每个单元的公式都相同。