Tin tức mới

    Đăng ký nhận báo giá 2026

    Xóa tất cả dòng trống bằng VBA trong Excel

    1. Sử dụng Vòng lặp ngược

    Quy tắc vàng: Khi xóa dòng bằng vòng lặp, bạn phải luôn chạy từ dưới lên trên.
    Tại sao phải chạy ngược? Nếu bạn xóa dòng 5 khi đang chạy xuôi, dòng 6 sẽ nhảy lên thành dòng 5. Vòng lặp tiếp theo sẽ nhảy sang dòng 6 (mới), dẫn đến việc bạn bỏ sót dòng 6 cũ. Chạy ngược giúp vị trí các dòng bên trên không bị thay đổi.

    
    Sub XoaDongTrong_VongLap()
        Dim lastRow As Long
        Dim i As Long
        Dim colIndex As Integer
        
        colIndex = 1 'Cột A là 1, B là 2...
        
        'Sử dụng công thức tìm dòng cuối cùng có chứa dữ liệu trong một Worksheet.
        lastRow = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        
        Application.ScreenUpdating = False 'Tắt cập nhật màn hình để chạy nhanh hơn
        
        For i = lastRow To 1 Step -1
            If Trim(Cells(i, colIndex).Value) = "" Then
                Rows(i).Delete
            End If
        Next i
        
        Application.ScreenUpdating = True 
    End Sub
    

    2. Dùng AutoFilter (Tốc độ “thần thánh”)

    Đây là cách nhanh nhất vì nó xử lý hàng loạt. Thay vì xóa từng dòng, chúng ta lọc ra tất cả dòng trống rồi xóa toàn bộ vùng hiển thị đó trong một nốt nhạc.

    
    Sub XoaDongTrong_Filter()
        Dim ws As Worksheet
        Dim lastRow As Long
        Dim targetColumn As Range
        
        Set ws = ActiveSheet
        'Xác định dòng cuối cùng của bảng tính
        lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
        
        'Vùng làm việc (ví dụ cột A)
        Set targetColumn = ws.Range("A1:A" & lastRow)
        
        Application.ScreenUpdating = False
        
        '1. Tắt Filter cũ nếu có
        ws.AutoFilterMode = False
        
        '2. Lọc các ô trống (Blanks)
        targetColumn.AutoFilter Field:=1, Criteria1:="="
        
        '3. Xóa các dòng đang hiển thị (trừ dòng tiêu đề - Offset(1))
        On Error Resume Next 'Tránh lỗi nếu không có dòng trống nào được tìm thấy
        targetColumn.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
        On Error GoTo 0
        
        '4. Tắt Filter sau khi xong
        ws.AutoFilterMode = False
        
        Application.ScreenUpdating = True
    End Sub
    

    3. Dùng Union (Linh hoạt và an toàn)

    Phương pháp này gom tất cả các dòng cần xóa vào một “nhóm” (biến delRange), sau đó chỉ thực hiện lệnh xóa đúng một lần duy nhất vào cuối chương trình.

    
    Sub XoaDongTrong_Union()
        Dim i As Long, lastRow As Long
        Dim delRange As Range
        Dim colIndex As Integer
        
        colIndex = 1 'Ki?m tra c?t A
        lastRow = Cells(Rows.Count, colIndex).End(xlUp).Row
        
        Application.ScreenUpdating = False
        
        For i = 1 To lastRow
            'Ki?m tra n?u ô tr?ng ho?c ch? ch?a kho?ng tr?ng
            If Trim(Cells(i, colIndex).Value) = "" Then
                If delRange Is Nothing Then
                    Set delRange = Rows(i) 'Dòng d?u tiên tìm th?y
                Else
                    Set delRange = Union(delRange, Rows(i)) 'Gom thêm dòng m?i vào nhóm
                End If
            End If
        Next i
        
        'Xóa toàn b? nhóm dã gom du?c
        If Not delRange Is Nothing Then
            delRange.Delete
        Else
            MsgBox "Không tim thay dòng nao de xoa."
        End If
        
        Application.ScreenUpdating = True
    End Sub
    
    
    Yêu cầu tư vấn

      Tư vấn sản phẩm phù hợp

      Yêu cầu báo giá

      Yêu cầu tư vấn kỹ thuật

      Leave a Reply

      Your email address will not be published. Required fields are marked *

      Gọi ngay 24/7 Zalo Messenger Support
      Gọi ĐT tư vấn ngay Chat ngay qua Messenger Chat ngay qua Zalo
      Yêu cầu tư vấn

        Tư vấn sản phẩm phù hợp

        Yêu cầu báo giá

        Yêu cầu tư vấn kỹ thuật