2012-10-05 160 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) 
相關問題