2

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

函数调用如下

=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
    
4

4 回答 4

2

像这样:

q1 = WorksheetFunction.quartile(QuartileRange, 1)
于 2012-10-05T07:38:42.190 回答
1

您可以QUARTILE直接在 VBA 中使用,无需EVALUATE.

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

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

Function Test(rng1 As Range)
Test = Application.WorksheetFunction.Quartile(rng1, 1)
End Function
于 2012-10-05T07:39:49.503 回答
1

不太清楚为什么要Evaluate在这里使用?我认为你需要这样做:

ql = WorksheetFunction.Quartile(QuartileRange, 1)
于 2012-10-05T07:41:52.863 回答
0
q1 = Evaluate("Quartile(INDIRECT(" + QuartileRange.Text + "), 1")

对不起,我不知道Quartile函数的用法,我假设它QuartileRange.Text包含字符串形式的范围地址。

于 2012-10-05T07:26:06.420 回答