2016-04-13 101 views
0

我想比較Excel VBA中的十進制值並刪除 與條件匹配的行。這是我的原始代碼,它跳過了許多行。比較十進制值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

+0

然後,您必須在數字上設置自定義掩碼。像'00.00「%''這意味着數字不是真正的百分比,而是數字作爲百分比mascarading。 –

+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 

的第二個問題是,刪除行的時候,最好向後遍歷。否則,它可能會遺漏一些行,因爲每行都被刪除,它會向上移動,然後下一次迭代會跳過下一行。

更改我從一個區域到長期使用這樣的:

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.

+0

感謝您的支持@tigeravatar –

+1

@Dombey如果您要刪除行,您需要從範圍的底部開始工作,否則您的算法將無法工作。如果你這樣做,並且仍然刪除24.75%等,那麼你的數據就會有一些問題。 –

+0

@Dombey然後你有數字和文字的混合看起來像數字。 –