使用自定义vba函数计算Excel 2010中的百分比

我没有vba的经验,我需要将这个百分位数函数转换成一个自定义的vba函数

=PERCENTILE( IF('RAW JO TIME'!$J$2:$J$51816=$A7, IF($B$4="(All)",'RAW JO TIME'!$P$2:$P$51816, IF('RAW JO TIME'!$M$2:$M$51816=$B$4,'RAW JO TIME'!$P$2:$P$51816) ) ), E$6) 

凡$ A7,$ B $ 4和$ 6应该作为parameter passing…

我一直在尝试不同的方法,但没有任何工作。 在论坛search,我发现一个可能的解决scheme是这样的:

 ActiveCell.Formula = "=IF('RAW JO TIME'!$J$2:$J$51816=" & InputRange & ", IF($B$4=""(All)"",'RAW JO TIME'!$P$2:$P$51816, IF('RAW JO TIME'!$M$2:$M$51816=$B$4,'RAW JO TIME'!$P$2:$P$51816)))" 

其中“InputRange”是作为parameter passing的单元格,其值在另一个表单范围内search。

也试过这个

 Dim r As Range Set r.FormulaArray = "=IF('RAW JO TIME'!$J$2:$J$51816=$A7, IF($B$4=""(All)"",'RAW JO TIME'!$P$2:$P$51816, IF('RAW JO TIME'!$M$2:$M$51816=$B$4,'RAW JO TIME'!$P$2:$P$51816)))" 

正如你所看到的,我没有使用这个参数,只是试图testing数组公式,但是我得到了相同的结果。 执行在Set r.FormulaArray中停止

就我的理解,这个IF语句将返回之后将被百分位数函数使用的单元格或数据matrix的范围…

但是,当我debugging的代码,它卡在那里在ActiveCell.Formula …为什么会这样?

我想知道在这种情况下,最好的解决scheme是如何在函数中实现每个“if”作为VB if语句?

帮助将不胜感激

谢谢!

这是我做的解决这个…

我开始玩Evaluate方法,只运行“IF”块,发现它返回一个数组,其中包含一个“错误”的logging不符合条件,所需的价值为那些做…所以我首先传递所有范围作为参数,并使用它们来构buildIF(数组公式),然后将其传递给Evaluate方法,并使用结果数组构build将传递给WorksheetFunction百分点方法的最终数组值(重要说明:结果和范围需要声明为数组…否则它将不起作用,或者至less不适用于我):

 Dim result() As Variant Dim ranges() As Variant Dim i, j, k As Integer Dim func As Variant 

IF(''&&&&&&&&&&&&&&&&&&=&=“&”&statusRangeAddress&“=”&statusValue.Address& “,IF(”&yearFunctionString&“,'”&valuesRangeSheet&“'”&valuesRangeAddress&“)))”

 result = Application.ActiveSheet.Evaluate(func) For i = 1 To UBound(result) If result(i, 1) <> False Then ReDim Preserve ranges(1 To k + 1) ranges(k + 1) = result(i, 1) k = k + 1 End If Next i CustomPercentileWFC = Application.WorksheetFunction.Percentile(ranges, Percentile) 

这里的复杂的事情是,在某些情况下,PERCENTILE函数会变得非常巨大,所以EVALUATE方法由于255个字符的限制而失败,这就是为什么我必须将它分成两部分。