比较小数值 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.