2016-05-14 187 views
0

當使用COUNTIF函數使我的VB子函數遇到問題時:COUNTIF返回一個範圍內的零或單元數。此外,當我使用其他數據時,有時會返回正確的數字。COUNTIF返回0或單元數

這裏是代碼我使用:

Sub CountifPerc() 

Dim i As Integer 
Dim MyArr() As Double 

Set InitialRange = Range("A1:A250") 
InitialRangeSize = InitialRange.Cells.Count 
ReDim MyArr(InitialRangeSize - 1) As Double 

For i = 1 To InitialRangeSize 
    MyArr(i - 1) = Application.WorksheetFunction.CountIf(InitialRange, "<=" & InitialRange(i).Value)/InitialRangeSize 
Next i 

End Sub 

你能,請幫助我這個問題?

UPD:我發現當我使用非整數數據時會發生問題。整數數據運作良好。

回答

1

我認爲你的問題是你的系統區域設置。以下是基於我的機器德語區​​域設置的行爲,但系統語言英語以及在excel設置中設置爲.的小數點分隔符。

"<=" & InitialRange(i).Value 

這產生一個字符串取決於您的設置。當InitialRange(i).Value轉換爲字符串時,顯然系統區域設置被使用。這意味着如果您的系統小數點分隔符是逗號,則"<=" & 1/2將產生"<=0,5",即使您將您的Excel設置設置爲

但是,你在你的情況下,想要的是"<=0.5"因爲很顯然Application.WorksheetFunction.CountIf需要.作爲小數點分隔符(即使COUNTIF工作表中輸入時需要從Excel中設置的分隔符!)

我能想到的兩種解決的:

"<=" & Replace(InitialRange(i).Value,",",".") 'just hope that your system doesn't insert thousands separators 

"<=" & str(InitialRange(i).Value) 'str uses . as decimal separator 
+0

是,它實際上工作!非常感謝! – Alex

0

通過使用隨機數據並迭代If..Then循環的片段,我能夠看到你在做什麼,但是我沒有任何關於代碼的問題。整數和雙精度的初始值給出了同樣有效的答案。下面是我如何運行的代碼:

Sub CountifPerc() 

    Dim i As Integer 
    Dim MyArr() As Double 

    Set InitialRange = Range("A1:A250") 
    InitialRangeSize = InitialRange.Cells.Count 

    ReDim MyArr(InitialRangeSize - 1) As Double 

    For i = 1 To InitialRangeSize 

    MyArr(i - 1) = Application.WorksheetFunction.CountIf(InitialRange, "<=" & InitialRange(i).Value)/InitialRangeSize 

    Range("B" & i).Value = i 
    Range("C" & i).Value = InitialRange(i).Value 
    Range("D" & i).Value = Application.WorksheetFunction.CountIf(InitialRange, "<=" & InitialRange(i).Value) 
    Range("E" & i).Value = MyArr(i - 1) 

    Next i 
End Sub 

這裏是一個非整數隨機數輸出的圖像,在A列中使用​​: Excel Worksheet output. 還有什麼你試過嗎?

+0

謝謝!但是,我不想用任何Excell單元來解決這個問題! 我實際使用另一個代碼,直至arcadeprecinct以上幫助來解決這個問題: 對於i = 1至InitialRangeSize d = 0 當c = 1要InitialRangeSize 如果InitialRange(I)> = InitialRange(C),然後 d = d + 1 結束如果 下一個C d = Application.WorksheetFunction.CountIfs(InitialRange, 「<=」 &InitialRange(ⅰ)。價值) myArr,該(I - 1)= d/InitialRangeSize 下一個I – Alex