2014-07-10 70 views
0

我沒有在VBA的經驗,我需要這個百分功能轉換爲一個自定義的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」是爲具有被搜索在另一片的範圍值paramters通過細胞...

也試過這個

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)))" 

正如你所看到的,我沒有使用的參數爲這一個,只是想測試數組公式是...但我得到了相同的結果。執行在設置r.FormulaArray

停止我的理解是,這IF語句將返回小區或之後將由百分函數中使用的數據矩陣的範圍...

但後來,我當調試代碼,它被卡在ActiveCell.Formula ...爲什麼會這樣?

我想知道在這種情況下,最好的解決方案是如何在函數中實現每個「if」作爲VB if語句?

幫助將不勝感激

謝謝!

+0

這是有效的,這是一個數組公式。 – ApplePie

+1

@ jprealini你至少需要知道如何開始使用VBA。一種簡單的方法是重建公式並使用Application.Evaluate()。 – ApplePie

+0

@ Dave.Gugg,正如我所解釋的那樣,我需要創建一個自定義的PERCENTILE函數,將矩陣作爲它的一系列數據,這些數據將成爲「IF」語句和您在其中進行比較的結果... – jprealini

回答

1

這是我做過什麼來解決這個...

我開始玩的評估方法,只運行了「IF」塊,並發現它返回含有的陣列「假「對於不符合條件的記錄,以及那些所需的值......所以我首先將所有範圍作爲參數傳遞,並用它們構建IF(數組公式),然後將它傳遞給Evaluate方法,並且使用結果數組來構建將傳遞給WorksheetFunction百分點方法的最終數組值(重要說明:結果和範圍需要聲明爲數組...否則它將無法工作,或者至少不起作用對我而言):

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) 

的複雜的事情在這裏的是,在某些情況下百分功能將得到真正巨大的,所以評估方法是失敗歸因於255個字符的限制,這就是爲什麼我不得不把它分解爲兩個部分...