Excel VBAで小数点の値を比較し、 の条件に一致する行を削除しようとしています。これは私の元のコードであり、多くの行をスキップしました。10進値の比較Excel VBA
スプレッドシートの値は、%記号付きの10進値です。
Excelが浮動小数点比較していくつかの問題を持っていますが、それはまだ正確に比較されませんので、私は「> 97.99」を試してみました。
Excel VBAで小数点の値を比較し、 の条件に一致する行を削除しようとしています。これは私の元のコードであり、多くの行をスキップしました。10進値の比較Excel VBA
スプレッドシートの値は、%記号付きの10進値です。
Excelが浮動小数点比較していくつかの問題を持っていますが、それはまだ正確に比較されませんので、私は「> 97.99」を試してみました。
パーセンテージは小数点整数で描かれています。たとえば、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から3列分が移動していました。1 + 3は4です。
catch @tigeravatar –
@Dombeyありがとうございます。行を削除する場合は、範囲の下から作業する必要があります。そうしないと、アルゴリズムが機能しません。あなたがそれをやっていて、依然として24.75%などを削除しているのであれば、あなたのデータについて何か不安があります。 –
@Dombey次に数字のような数字とテキストが混在しています。 –
この番号にカスタムマスクが必要です。 '00.00"% "'のようなものは、数値が真のパーセンテージではなく、パーセンテージとしてマスカレードすることを意味します。 –
いいえ。これは数百の値です。私は> = 98.00に戻って変更して動作します!ありがとうございました。 – Dombey