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.
microsoft-excel
vba
macros
Alex Martin
sumber
sumber
For i = lastRow to 1 step -1
Jawaban:
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.
sumber