我正在尝试比较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在浮点比较方面存在一些问题,但它仍然没有准确比较。
答案 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.