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才会起作用。为什么会发生这种情况,我该如何解决这个问题?

谢谢!

回答:

如果小数点分隔符逗号由于区域设置,的DoubleString然后隐式转换,用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

回到顶部