COUNTIF返回0或单元格数

时间:2016-05-14 21:47:41

标签: arrays vba excel-vba countif excel

在制作我的VB sub时使用COUNTIF函数我遇到了一个问题:COUNTIF返回一个范围内的零个或多个单元格。此外,当我使用其他数据时,有时会返回正确的数字。

以下是我使用的代码:

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:我发现当我使用非整数数据时会出现问题。整数数据效果很好。

2 个答案:

答案 0 :(得分:1)

我认为您的问题是您的系统区域设置。以下是基于我的机器使用locale Germany的行为,但系统语言英语以及excel设置中的小数分隔符设置为.

"<=" & InitialRange(i).Value

这会产生一个取决于您的设置的字符串。显然,在InitialRange(i).Value转换为字符串时使用系统区域设置。这意味着,如果您的系统小数分隔符是逗号,那么"<=" & 1/2即使您将Excel工具设置为其他,也会生成"<=0,5"

但是,您需要的是"<=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

答案 1 :(得分: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列中使用=RAND()*1000Excel Worksheet output. 你还尝试了什么?