在制作我的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:我发现当我使用非整数数据时会出现问题。整数数据效果很好。
答案 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()*1000
:
Excel Worksheet output.
你还尝试了什么?