比较Excel VBA中的十进制值

比较Excel VBA中的十进制值,excel,vba,decimal,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 电子表格上的值是带%符号的十进制值 我尝试了“>97.99”,因为Excel在浮点比较方面

我试图比较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从范围更改为长,并使用以下选项:

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。

百分比是用整数表示的十进制。例如,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从范围更改为长,并使用以下选项:

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。

谢谢您的帮助@tigeravatar@Dombey如果要删除行,则需要从范围的底部向上操作,否则算法将无法工作。如果您这样做了,但仍然删除了24.75%,等等,那么您的数据有点模糊。@董贝,那么您的数字和文本混合在一起,看起来像数字。@董贝一个快速检查是选择一个单元格,然后在VBE type
的即时窗口中?选择.Value
并按enter键。如果它返回
24.75%
则它是一个文本,如果它返回
0.2475
则它是一个数字。@董贝,还有一个问题,是D列中的百分比吗?谢谢你的帮助@tigeravatar@Dombey如果要删除行,则需要从范围的底部向上操作,否则算法将无法工作。如果您这样做了,但仍然删除了24.75%,等等,那么您的数据有点模糊。@董贝,那么您的数字和文本混合在一起,看起来像数字。@董贝一个快速检查是选择一个单元格,然后在VBE type
的即时窗口中?选择.Value
并按enter键。如果它返回
24.75%
则它是一个文本,如果它返回
0.2475
则它是一个数字。@董贝,还有一个问题,D列中的百分比是多少?您必须在数字上有一个自定义掩码。类似于
00.00“%”
这意味着数字不是真实的百分比,而是数字睫毛膏的百分比。否。这些是数百个数值。我改回>=98.00,它工作了!谢谢。然后你必须在数字上有一个自定义掩码。类似于
00.00“%”
这意味着数字不是真实的百分比,而是数字睫毛膏的百分比。否。这些是数百个数值。我改回>=98.00,它工作了!非常感谢。