如何从VBA函数将范围传递给Excel公式

我正在写一个vba函数来生成平滑graphics的移动平均值。 我需要使用四分位数范围来调整平滑公式。 如何将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 

喜欢这个:

 q1 = WorksheetFunction.quartile(QuartileRange, 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 

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

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

我很抱歉,我不知道使用Quartile函数,并假定QuartileRange.Text包含stringforms的范围地址。