• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

CountIfs不能使用小数

excel 来源:bthorn 4次浏览

我有一个大约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) – 大于以上听起来很奇怪;-)


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)