2016-04-13 15 views
0

Excel VBAで小数点の値を比較し、 の条件に一致する行を削除しようとしています。これは私の元のコードであり、多くの行をスキップしました。10進値の比較Excel VBA

スプレッドシートの値は、%記号付きの10進値です。

enter image description here

Excelが浮動小数点比較していくつかの問題を持っていますが、それはまだ正確に比較されませんので、私は「> 97.99」を試してみました。

Selection.Valueを使用した後に表示されます。 enter image description here

enter image description here

+0

この番号にカスタムマスクが必要です。 '00.00"% "'のようなものは、数値が真のパーセンテージではなく、パーセンテージとしてマスカレードすることを意味します。 –

+0

いいえ。これは数百の値です。私は> = 98.00に戻って変更して動作します!ありがとうございました。 – Dombey

答えて

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から3列分が移動していました。1 + 3は4です。

+0

catch @tigeravatar –

+1

@Dombeyありがとうございます。行を削除する場合は、範囲の下から作業する必要があります。そうしないと、アルゴリズムが機能しません。あなたがそれをやっていて、依然として24.75%などを削除しているのであれば、あなたのデータについて何か不安があります。 –

+0

@Dombey次に数字のような数字とテキストが混在しています。 –