比较十进制值Excel VBA

时间:2016-04-13 17:57:30

标签: excel vba decimal

我正在尝试比较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

电子表格中的值只是带有%符号的十进制值。

enter image description here

我试过"> 97.99"因为Excel在浮点比较方面存在一些问题,但它仍然没有准确比较。

以下是使用Selection.Value后显示的内容。 enter image description here

enter image description here

1 个答案:

答案 0 :(得分:4)

百分比是用整数表示的十进制数。例如,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从范围更改为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.