10

マクロに問題があります。特定の基準を満たす行を削除します。ただし、これらの基準を満たす連続した行がほとんどない場合、エラーが発生します。行が削除されると、他の行が上にシフトされるため、行 (2:2) と行 (3:3) が基準を満たす場合、行 (2:2) が削除され、行 (3:3) が上にシフトされます。なので、row(2:2) になり、For ループは別の行 (3 番目の行) に移動します。その結果、以前はrow(3:3)で現在はrow(2:2)になっている行は削除されず、削除されません。
この話題を扱うには、For ループに逆行すればよいと思いますので、上から下ではなく、下から上になります。その結果、一部の行が二重にチェックされますが、行が省略されることはありません。
問題は、For ループを修正する方法がわからないことです。「For x = startrow To endrow」を「For x = endrow To startrow」に変更しようとしましたが、役に立ちませんでした。
コードは次のとおりです。

Sub Repurchase_upload()

Dim Worksheet As Worksheets
startrow = Worksheets("GUTS").Cells(10, 1)
endrow = Worksheets("GUTS").Cells(11, 1)

 For x = startrow To endrow 'I have tried to change this line into: 'For x = endrow To startrow', but it didn' help
            If Cells(x, "A").Value <> "AA" And Cells(x, "A").Value <> "AB" And Cells(x, "A").Value <> "AC" And Cells(x, "A").Value <> "AD" And Cells(x, "A").Value <> "AE" And     Cells(x, "A").Value <> "AH" And Cells(x, "A").Value <> "AI" And Cells(x, "A").Value <> "AF" And Cells(x, "A").Value <> "AG" Then
            Cells(x, "A").EntireRow.Delete

            End If



    Next
End Sub  

よろしくお願いします

Artur Rutkowski

4

3 に答える 3

34

行をループして削除している場合は、一番下から始めて作業する必要があります。

For x = endrow To startrow step -1

その後、行を削除してもループは中断されません。

于 2013-07-30T10:14:57.300 に答える