CountIfs不能使用小数
我有一个大约7000行数据的工作表,我想使用CountIfs进行分析。数据由十进制数字组成,例如“0,05234234”(小数点“是由于国家设置而产生的逗号)。我COUNTIFS代码看起来是这样的:CountIfs不能使用小数
For i = 1 To 6 lastRow = w3.Worksheets(i).Cells(w3.Worksheets(i).Rows.count, 1).End(xlUp).Row
For j = 1 To n
tmpRow = 2
Set rng = w3.Worksheets(i).Range(w3.Worksheets(i).Cells(2, 1 + j), w3.Worksheets(i).Cells(lastRow, 1 + j))
Do While w1.Worksheets(i).Cells(tmpRow, 1) <> ""
If tmpRow = 2 Then
above = CDbl(-100) 'first element
Else
above = w1.Worksheets(i).Cells(tmpRow - 1, 1)
End If
curr = w1.Worksheets(i).Cells(tmpRow, 1)
ccount = Application.WorksheetFunction.CountIfs(rng, ">" & above, rng, "<=" & curr)
w1.Worksheets(i).Cells(tmpRow, 1 + j) = ccount
tmpRow = tmpRow + 1
Loop
above = w1.Worksheets(i).Cells(tmpRow - 1, 1)
w1.Worksheets(i).Cells(tmpRow, 1 + j) = Application.WorksheetFunction.CountIf(rng, ">" & above)
tmpRow = tmpRow + 1
Next j
Next i
“上方” 和 “CURR” 的值被均匀地间隔开这样-2,-1,99,..,0,...,1,99,2 。
然而,它不工作,它让我疯狂。除了最后一个循环之外,“ccount”的值对于每次迭代都是0。对于那个,“above”等于2,一个整数。事实证明,只有“上面”和“curr”是整数时,CountIfs才会起作用。为什么会发生这种情况,我该如何解决这个问题?
谢谢!
回答:
如果小数点分隔符逗号由于区域设置,的Double
到String
然后隐式转换,用CStr
导致String
与逗号作为小数分隔显式转换。但这对WorksheetFunction.CountIfs
不正确。有一个小数点是需要的。
所以我们必须在这里使用Str
进行转换。这将永远转换为带有小数点的String
。
你如何测试此行为:
Sub test() Dim above As Double
above = 1.23
'Excel's decimal separator is comma due to the locale settings!
s = "<" & above ' "<1,23" - implicit conversion Double to String
Debug.Print s
s = "<" & CStr(above) ' "<1,23" - explicit conversion with CStr
Debug.Print s
s = "<" & Str(above) ' "< 1.23" - explicit conversion with Str
Debug.Print s
End Sub
不过是你的逻辑是否正确? ...CountIfs(rng, ">" & above, rng, "<=" & curr)
- 大于以上听起来很奇怪;-)
以上是 CountIfs不能使用小数 的全部内容, 来源链接: utcz.com/qa/262880.html