2013-08-28 235 views
0

我试图使用VBA来计算一些字段。 当我录制宏,我得到这样的:引用VBA中Excel公式中的一组单元格范围

ActiveCell.FormulaR1C1 = "=AVERAGEIF(R4C[-27]:R4C[-6],2012,RC[-27]:RC[-6])" 

的问题是,该公式的范围内可以改变。

我有一个Integer变量NumOfMon,它从表格的第一列计算公式所需的列。但是,上面的公式使用偏移量来确定所需的范围,但是因为我的范围可能会发生变化,所以我需要使用NumOfMon才能使用所需的单元格。如何更改公式以便我可以正确使用它?

我尝试使用变量是这样的:

a = 28 
NumofMon = 21 
ActiveCell.FormulaR1C1 = "=AVERAGEIF(R4C[-(a-1)]:R4C[-(a-NumOfMon-1)],2012,RC[-(a-1)]:RC[-(a-NumOfMon-1)])" 

,但我得到一个错误:“应用程序定义或对象定义的错误”

+0

你需要使用VBA来做到这一点?只有这个片段,听起来像你可以在普通公式中使用'offset()'。 –

+0

我刚刚写了一个固定值的“a”和“NumofMon”,但他们可以有任何其他的值,因为他们实际上是计算出来的 – user1040563

+0

是的,'offset()'允许你引用'a'和'numofmon'动态创建一个可以引用的表。但是,听起来你需要为此使用VBA。 –

回答

2

基本上

ActiveCell.FormulaR1C1 = "=AVERAGEIF(R4C[-" & (a-1) & "]:R4C[-" & (a-NumOfMon-1) & "],2012,RC[-" & (a-1) & "]:RC[-" & (a-NumOfMon-1) & "])" 
1

如果可能的话,把你的数据到一个表。这样,您可以参考动态数据(更改大小)而不会遇到问题。例如,要引用名为'Table'的表中名为'Item'的列A,引用将是'= Table1 [Item]'不管行是什么。

相关问题