比较小数值 Excel VBA
Comparing Decimal Values Excel VBA
我正在尝试比较 Excel VBA 中的十进制值并删除那些行
符合标准。这是我的原始代码,它跳过了很多行。
For Each i In WSData.Range("A7", WSData.Range("A7").End(xlDown)).Cells
If i.Offset(0, 3).Value >= 98 Then
i.EntireRow.Delete
End If
Next
电子表格中的值是十进制值,只是带有 % 符号。
我尝试了“> 97.99”,因为 Excel 在浮点比较方面存在一些问题,但仍然无法准确比较。
这是使用 Selection.Value 后显示的内容。
百分比是用整数表示的小数。例如 100.00% 存储为 1,98.01% 存储为 .9801.
因此您需要调整阈值:
For Each i In WSData.Range("A7", WSData.Range("A7").End(xlDown)).Cells
If i.Offset(0, 3).Value >= .98 Then
i.EntireRow.Delete
End If
Next
第二个问题是删除行时最好向后迭代。否则它可能会遗漏一些行,因为随着每一行被删除,它会向上移动,然后下一次迭代会跳过下一行。
将 i 从 range 更改为 long 并使用:
For i = WSData.Range("A7").End(xlDown).row to 7 Step -1
If WSData.Cells(i,3).Value >= .98 Then
Row(i).Delete
End If
Next
编辑:因为数字格式上似乎有一个自定义掩码,它强制数字看起来像百分比,试试这个:
For i = WSData.Range("A7").End(xlDown).row to 7 Step -1
If WSData.Cells(i,3).Value >= 98 Then
Row(i).Delete
End If
Next
如果这可行,那么您的主要问题是您查看的是 D 列。偏移量是累加的。因此,当您使用 .offset(0,3)
时,它会从 A 列移动三列。1 + 3 是 4.
我正在尝试比较 Excel VBA 中的十进制值并删除那些行 符合标准。这是我的原始代码,它跳过了很多行。
For Each i In WSData.Range("A7", WSData.Range("A7").End(xlDown)).Cells
If i.Offset(0, 3).Value >= 98 Then
i.EntireRow.Delete
End If
Next
电子表格中的值是十进制值,只是带有 % 符号。
我尝试了“> 97.99”,因为 Excel 在浮点比较方面存在一些问题,但仍然无法准确比较。
这是使用 Selection.Value 后显示的内容。
百分比是用整数表示的小数。例如 100.00% 存储为 1,98.01% 存储为 .9801.
因此您需要调整阈值:
For Each i In WSData.Range("A7", WSData.Range("A7").End(xlDown)).Cells
If i.Offset(0, 3).Value >= .98 Then
i.EntireRow.Delete
End If
Next
第二个问题是删除行时最好向后迭代。否则它可能会遗漏一些行,因为随着每一行被删除,它会向上移动,然后下一次迭代会跳过下一行。
将 i 从 range 更改为 long 并使用:
For i = WSData.Range("A7").End(xlDown).row to 7 Step -1
If WSData.Cells(i,3).Value >= .98 Then
Row(i).Delete
End If
Next
编辑:因为数字格式上似乎有一个自定义掩码,它强制数字看起来像百分比,试试这个:
For i = WSData.Range("A7").End(xlDown).row to 7 Step -1
If WSData.Cells(i,3).Value >= 98 Then
Row(i).Delete
End If
Next
如果这可行,那么您的主要问题是您查看的是 D 列。偏移量是累加的。因此,当您使用 .offset(0,3)
时,它会从 A 列移动三列。1 + 3 是 4.