これは、2つの列をループして、L列の値が別のシートのセルの特定の(単一の)値よりも低いことを確認するためのものです。また、列Mの同じ行にあるセルに「#N/A」エラーがあるかどうかを確認します。これらが真の場合、行全体が削除されます。下のコードは動作するようですが、Forループを複数回実行してすべての行を完全に削除する必要があります。私の勘は、行が削除されたときに、その行のすぐ下にある行をチェックして移動していないということです。どうすればこれを避けることができますか?どんな助けもありがとうございます。前の行をチェックして削除したときに行チェックがスキップされないようにするにはどうすればよいですか?
Sub removerows()
Dim wsOut As Worksheet
Dim wsPrev As Worksheet
Dim r As Long
Dim Lastrow As Long
Set wsOut = Worksheets("Output")
Set wsPrev = Worksheets("Previous")
Lastrow = wsOut.UsedRange(wsOut.UsedRange.Cells.Count).Row
For r = 2 To Lastrow
If wsOut.Cells(r, "L").Value < wsPrev.Cells(2, "L").Value And _
Application.WorksheetFunction.IsNA(wsOut.Cells(r, "M").Value) Then
wsOut.Cells(r, "L").EntireRow.Delete
Else
wsOut.Cells(r, "L").Interior.ColorIndex = 20
End If
Next
End Sub
ローを削除すると、次のローをr番目のポジション(現在のローを置き換える)に "昇進"しているので、次のrにインクリメントすると、アップ。また、行を削除してもLastrow(合計行数)が同じままであるため、下部に問題があるように見えます。 – vknowles