COUNTIF returns 0 或单元格数

COUNTIF returns either 0 or number of cells

当使用 COUNTIF 函数制作我的 VB 子时,我遇到了一个问题:COUNTIF returns 范围内的单元格数量为零或数量。此外,有时它 returns 在我使用其他数据时纠正数字。

这是我使用的代码:

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

你能帮我解决这个问题吗?

更新:我发现当我使用非整数数据时会出现问题。整数数据效果很好。

通过使用 运行dom 数据,并迭代 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

这里是非整数 运行dom 数字的输出图像,在 A 列中使用 =RAND()*1000Excel Worksheet output. 你还尝试了什么?

我认为你的问题是你的系统语言环境。以下是基于我的机器在德国语言环境下的行为,但系统语言英语以及小数点分隔符在 excel 设置中设置为 .

"<=" & InitialRange(i).Value

这会生成一个字符串,具体取决于您的设置。显然,当 InitialRange(i).Value 转换为字符串时使用系统语言环境。这意味着,如果您的系统小数点分隔符是逗号,那么 "<=" & 1/2 将生成 "<=0,5" ,即使您将 excel 设置为其他内容

但是,您想要的是 "<=0.5" 因为显然 Application.WorksheetFunction.CountIf 需要 . 作为小数点分隔符(即使在工作表上输入 COUNTIF 时需要 . 中的分隔符=32=]设置!)

我可以想到两个解决方法:

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

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