2013-08-28 236 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]'不管行是什麼。

相關問題