使用参考单元通过VBA在一系列单元格中插入公式

时间:2015-02-19 20:58:50

标签: excel excel-vba excel-2010 vba

我有一个循环的代码,并计算一行日期的输入列的公式。它在VBA中循环和写入速度相当慢,所以我希望将公式粘贴到单元格而不是计算值。我的计划是为结果创建一个范围,并将范围设置为等于公式。

但是我坚持使用这个公式。公式使用前面的答案加上其他数据,我不得不尝试创建范围的公式,以便参考单元格移动范围内的每个单元格。

对于单元格N7,公式将如下所示

   =IF(M7<>0,(M7-$D7)^(1/30.4),$B7*(1-$C7)^(1/$E7))

复制到单元格O7时,公式将如下所示

  =IF(N7<>0,(N7-$D7)^(1/30.4),$B7*(1-$C7)^(1/$E7))

对于O8,它看起来像这样

  =IF(N8<>0,(N8-$D8)^(1/30.4),$B8*(1-$C8)^(1/$E8))

我理解如何遍历每个单元格并编写公式,但我认为它不会比计算它然后写出答案快得多。我希望有一种方法可以将范围设置为等于填充正确单元格引用的公式。

ActiveCell.Offset会成为解决方案吗?

2 个答案:

答案 0 :(得分:1)

使用相对参考:

.FormulaR1C1 = "=IF(RC[-1]<>0,(RC[-1]-RC4)^(1/30.4),RC2*(1-RC3)^(1/RC5))"

如果你需要,你可以在一个范围内使用它来一次填充,而不是像这样循环:

Range("N7:P20").FormulaR1C1 = "=IF(RC[-1]<>0,(RC[-1]-RC4)^(1/30.4),RC2*(1-RC3)^(1/RC5))"

R是行,C是相对于自我否定的列必须在[]

答案 1 :(得分:1)

您也可以使用A1 Notation

执行此操作
Range("N7:O8").Formula = "=IF(M7<>0,(M7-$D7)^(1/30.4),$B7*(1-$C7)^(1/$E7))"

使用R1C1 Notation有一些优点,但对于这个,你最好使用它,更容易阅读。 HTH。