2016-12-02 96 views
1

我必須刪除所有必須等於VBA excel中的單元格的行。這是我寫的:VBA - 在循環中刪除具有條件的行

Dim i As Long, j As Long 
j = Rows.Count 
For i = 1 To j 
    If Cells(i, 17).Value = Cells(i, 19).Value Then Rows(i).Delete 
Next i 

但是,這段代碼並沒有刪除我正在尋找的每一行。如果有兩行分別與條件匹配,則Excel會跳轉到另一個並保留這一點(這是邏輯上的),我不知道如何調整此循環以返回並刪除搜索到的每一行。

+5

總是循環向後'對於i = j到1步-1# –

+0

http://stackoverflow.com/questions/15375054/vba-macro-to-delete-rows-quickly –

+0

你應該檢查我的答案[比較單元格刪除行,值是真實的但不刪除行](http://stackoverflow.com/questions/40755334/compare-cells-to-delete-rows-value-is-true-but-not-deleting-rows/40755406#40755406)。它演示了在遍歷循環時刪除的效果。 – 2016-12-02 15:47:59

回答

2

我在理解什麼從你的代碼是,它不是迭代所有的線,因爲其中一個條件得到滿足。 我的建議是反向循環它。從上個迭代使用「-1」

相反的:

For i = 1 To j 
    If Cells(i, 17).Value = Cells(i, 19).Value Then Rows(i).Delete 
Next i 

這樣做:

For i = j to 1 Step - 1 
    If Cells(i, 17).Value = Cells(i, 19).Value Then Rows(i).Delete 
Next i 
+1

如果您演示了示例代碼,這將是一個有用的答案。 –

+0

「For i = j To 1 Step -1」 只需將它放在您的代碼中而不是現有的For循環中。對不起,我現在無法測試它,因爲我的msoffice有問題。 –

+0

謝謝,它幫助了很多! – Cezary

0

當你刪除你有遞減i的值的行和更新j的值。 因爲當你刪除行:在第i位置

  • 以下行現在是
  • 行(j)的數目由1行刪除行當減小
+1

很好的解釋。這是一種可能的解決方案,但通常優選的方法是執行向後迭代(例如,「對於i = 100到1步驟-1」),而不是遞減循環計數器變量。 –