[英]Calculate percentile in Excel 2010 using custom vba function
我沒有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和E $ 6應該作為參數傳遞...
我一直在嘗試不同的方法,但是沒有用。 在論壇中搜索,我發現可能的解決方案是:
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”是作為參數傳遞的單元格,其值在另一張圖紙的范圍內搜索...
還嘗試了這個
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)))"
如您所見,我沒有為此使用參數,只是嘗試按原樣測試數組公式...但是得到的結果相同。 執行在Set r.FormulaArray中停止
據我了解,此IF語句將返回單元格或數據矩陣的范圍,之后將由Percentile函數使用...
但是,當我調試代碼時,它卡在了ActiveCell.Formula中……為什么會這樣呢?
我想知道在這種情況下最好的解決方案是否是將函數中的每個“ if”都實現為VB if語句?
幫助將不勝感激
謝謝!
這就是我為解決這一問題所做的...
我開始使用Evaluate方法,只運行“ IF”塊,發現它返回了一個數組,其中包含與條件不匹配的記錄的“ false”以及滿足條件的記錄所需的值...所以我首先將所有范圍作為參數傳遞,並用它們來構建IF(數組公式),然后將其傳遞給Evaluate方法,並使用結果數組來構建最終值數組,該值將傳遞給WorksheetFunction percentile方法(重要說明:結果和范圍需要聲明為數組...否則它將不起作用,或者至少對我不起作用):
Dim result() As Variant
Dim ranges() As Variant
Dim i, j, k As Integer
Dim func As Variant
func =“ = IF('”&officeRangeSheet&“'!”&officeRangeAddress&“ =”&officeValue.Address&“,IF('”&statusRangeSheet&“'!”&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函數會變得非常龐大,因此由於255個字符的限制,EVALUATE方法失敗了,這就是為什么我必須將其分為兩個部分...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.