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()*1000
:
Excel 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
当使用 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()*1000
:
Excel 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