2012-10-05 118 views
2

我正在编写一个函数来生成平滑图形的移动平均值。我需要使用四分位数范围来调整平滑公式。如何将QuartileRange传递给Evaluate函数以返回该范围的四分位数值,以便我可以在我的函数中使用它?如何将范围从VBA函数传递给Excel公式

该函数的调用如下

=MovingAverageSmoothQuartile(A1, 4, B1:b10) 

  • A1是值来平滑,
  • 4是值的数量使用和
  • B1:B10是一个用于计算四分位数值的样本列。

    Function MovingAverageSmoothQuartile(r As Range, ByVal m As Integer, QuartileRange As Range) 
    ' returns a smoothed average using the 'rectangular' method 
    Dim q1 As Double, q2 As Double, q3 As Double   
    q1 = Evaluate("Quartile(" + QuartileRange.Text + ", 1") ' <--- Stuck here 
    
+0

'QuartileRange.Text'包含什么? – shahkalpesh

+0

如果不使用&连接比+更大的字符串? – Dan

+0

谢谢所有回答的人。当我恢复工作时,我会实施你的建议。 – Martlark

回答

2

像这样:

q1 = WorksheetFunction.quartile(QuartileRange, 1) 
0
q1 = Evaluate("Quartile(INDIRECT(" + QuartileRange.Text + "), 1") 

我很抱歉,我不知道该用Quartile功能&的我假设QuartileRange.Text包含字符串形式的范围内的地址。

1

您可以直接在VBA使用QUARTILE没有EVALUATE

例如,从A1返回第一个四分位数:A10:

Sub Calltest() 
MsgBox Test([a1:a10]) 
End Sub 

Function Test(rng1 As Range) 
Test = Application.WorksheetFunction.Quartile(rng1, 1) 
End Function 
1

不明白为什么你会使用Evaluate这里?我认为你需要这样做:

ql = WorksheetFunction.Quartile(QuartileRange, 1) 
相关问题