簡體   English   中英

使用自定義vba函數在Excel 2010中計算百分位數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM