2013-09-27 17 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