2013-09-27 22 views
0

我有一個大循環遍歷1000個數據加載..而不是儘可能有效地做到這一點(保存輸出到數組,然後在最後打印),我一直將值寫入工作表,然後爲每次運行復制並粘貼到另一個工作表。如何寫公式作爲工作表函數

我有一對理論和實踐的問題。

  1. 它更快繼續複製/粘貼的每一行,除了在當前工作表內這樣做,然後複製並粘貼最終數據表在最後?

  2. 如何將該函數重寫爲工作表公式?我目前不使用數組的原因是我不知道如何將此公式重寫爲非單元格公式。

Dim avg_rng As Range 
Set avg_rng = Sheets("OrdCloseTrade").Range(Cells(strt_pt(end_ct), j), Cells(end_pt(end_ct) - 
1, j)) 
'Debug.Print sum_rng 

Sheets("OrdCloseTrade").Cells(47, lent + 2).FormulaArray = _ 
"=AVERAGE(IF(ISNUMBER(" & avg_rng.Address & ")," & avg_rng.Address & "))" 
+0

使用它在一個單元格,你想要的UDF(用戶定義函數)的輸出是什麼? – sam092

+0

avg_rng是一組數字,可能包含#VALUE錯誤。我想寫一個像這個數組函數一樣的函數,它將在內部執行和保存而不寫入表單。我認爲這會使程序運行得更快。輸出應該是整個範圍內的平均值,不包括錯誤值。 – googlekid

+0

也按功能我指的是.FormulaArray ....不是一個單獨的VBA功能 – googlekid

回答

0

並沒有完全得到你的第一個問題。

但是,複製粘貼操作越少,執行速度就越快。

對於第二個問題,或許以下可能會給你一個提示。

Function avgVal(ByVal rng As Range) 
    avgVal = Application.Evaluate("=average(if(isnumber(" & rng.Address & ")," & rng.Address & "))") 
End Function 

該函數將範圍作爲參數並輸出平均值。所以,你可以通過調用

=avgVal(A1:D1)例如

+0

好的真棒...是啊這就是我正在尋找「.Evaluate」 – googlekid

+0

這將工作的數組公式雖然? – googlekid

+0

我嘗試了3在A1中,4在B1 #REF中!在C1和9中D1 最後,E1:'= avgVal(A1:D1)'給出5.5333 所以看起來沒問題 – sam092