Baris Excel yang harus dihapus tidak dihapus

1

Saya membuat makro yang menyoroti baris jika nilai dalam sel di satu lembar tidak ada di lembar lain, dan kemudian menghapus baris jika nilai ada di kedua lokasi. Tetapi untuk beberapa alasan itu tidak menghapus semua baris yang diperlukan pada pass pertama.

Jika saya terus meluncurkan makro itu pada akhirnya akan menghapus semua baris yang ingin saya hapus, tetapi mengapa tidak melakukannya selama pass pertama?

Sub ActivityRegNonMembers()

    Dim lastRow As Integer
    Dim rng As Range
    lastRow = Sheets("Program Participants").Range("A1").SpecialCells(xlCellTypeLastCell).Row
    Application.ScreenUpdating = False
    For i = 1 To lastRow
        Set rng = Sheets("Current Members").Range("C:C").Find(Sheets("Program Participants").Cells(i, 18))
        If rng Is Nothing Then
            Sheets("Program Participants").Cells(i, 18).EntireRow.Interior.Color = vbYellow
        End If
        If Not rng Is Nothing Then
            Sheets("Program Participants").Rows(i).EntireRow.Delete
        End If
    Next i
    Application.ScreenUpdating = True
End Sub

Bantuan apa pun akan dihargai.

Alex Martin
sumber
2
putaran ke belakangFor i = lastRow to 1 step -1
Scott Craner

Jawaban:

1

Ketika Anda menghapus satu baris (mis. 15), baris berikutnya (awalnya 16) sekarang menjadi baris 15. Kemudian Anda menambah i menjadi 16 (yang asli 17), dan dengan demikian Anda melewatkan yang asli 16. Jadi, setiap kali Anda memiliki dua baris berturut-turut untuk dihapus, Anda akan melewatkan yang kedua. Salah satu solusinya adalah menambahkan i = i - 1 setelah Anda menghapus satu baris. Maka for loop akan bertambah kembali ke tempat yang Anda inginkan.

Benjamin
sumber