问题是什么?由于一些奇怪的原因,excel无法从范围中正确计算值。
呈现范围的正确总和为0
,excel表示它总和为1,818989E-12
。当我选择次要范围(例如,没有第一个或最后一个单元格)时,它正确地求和,当我改变范围的数字格式时,它总和正确 - 但这些变通方法仅在工作表中起作用 - 当我使用VBA时(实际上这是某些部分的一部分)宏)我仍然得到这个奇怪的数字 - WorksheetFunction
,Sum
,Subtotal
每个SumIf
仍然返回正确的结果,更改范围的数字格式不起作用,也乘以1,所以欢迎任何建议。我还可以说,这只发生在这种特定的情况下 - 可能其余的分析数据都很好(=总和正常工作),这也不是一个变量类型的问题,因为第一个版本的代码没有使用任何变量来标记总和。
这是代码的一部分:
For Each kom In amountRng
Set baza = Rows("" & prevKom.Offset(1, 0).Row & ":" & kom.Offset(-1, 0).Row & "")
baza.Copy
Sheets("roboczy").Activate
Range("A2").PasteSpecial xlPasteValues
'multipying by 1 doesn't work
'Range("A1").End(xlToRight).Offset(0, 1).Select
'Selection.Value = 1
'Selection.Copy
'Range(Range("V2"), Range("V2").End(xlDown)).PasteSpecial Paste:=xlPasteValues, Operation:=xlMultiply
'changing of numberformat doesn't work
'Columns("V:V").NumberFormat = "0.00"
If IsEmpty(Range("A3")) Then
Range("M2").Copy
Range("A4").PasteSpecial xlPasteValues
Else:
Range(Range("M2"), Range("M2").End(xlDown)).Copy
Range("A2").End(xlDown).Offset(2, 0).PasteSpecial xlPasteValues
End If
Selection.RemoveDuplicates 1
Selection.CurrentRegion.Select
Dim liczba As Single
For Each zam In Selection
Range("A1").CurrentRegion.AutoFilter field:=13, Criteria1:=zam.Value
Set sumowanieRng = Range(Range("V" & Rows.Count).End(xlUp), Range("V2")).Cells.SpecialCells(xlCellTypeVisible)
sumowanieRng.EntireRow.Copy
liczba = WorksheetFunction.Sum(sumowanieRng)
Debug.Print liczba
If liczba = 0 Then
Sheets("zerowe").Activate
Range("A" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Else:
Sheets("niezerowe").Activate
Range("A" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
End If
Application.CutCopyMode = False
Sheets("roboczy").Activate
If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False
Next
Range("A" & Rows.Count).End(xlUp).Select
Range(Range("A2"), Selection).EntireRow.Clear
Sheets(2).Activate
Set prevKom = kom
Next
答案 0 :(得分:0)
如果想要更准确的求和,请使用非浮点数据类型,如十进制
Dim d, c, i
For Each c In Range("B2:B25")
d = d + CDec(c)
i = i + CDbl(c)
Next c
Debug.Print d, i
输出
0 1.81898940354586E-12
请记住1.81898940354586E-12非常接近0.