Menu

Tự động hóa việc tạo bảng tổng hợp dữ liệu từ nhiều Sheet bằng VBA

Lỗ Khoa Tâm 03/04/2026 19:40 326 lượt xem 3 trả lời

Chào các anh em, dạo này mình hay phải làm báo cáo tổng hợp từ nhiều file Excel khác nhau, mỗi file lại có nhiều sheet. Việc copy-paste thủ công mất rất nhiều thời gian và dễ sai sót. Sau một hồi mày mò, mình đã viết được một đoạn code VBA khá hay để tự động hóa việc này. Hôm nay chia sẻ lên đây để anh em tham khảo và góp ý.

Mục đích của code:

  • Tự động gom dữ liệu từ tất cả các sheet trong một file Excel đang mở (hoặc một file chỉ định) vào một sheet mới có tên là 'BaoCaoTongHop'.
  • Giả định rằng các sheet cần gom dữ liệu có cấu trúc cột giống nhau.
  • Bỏ qua sheet 'BaoCaoTongHop' nếu nó đã tồn tại để tránh lặp lại.

Code VBA:


Sub GopDuLieuTuNhieuSheet()
    Dim ws As Worksheet
    Dim wsDest As Worksheet
    Dim rng As Range
    Dim lastRow As Long
    Dim firstRow As Boolean

    On Error Resume Next
    Set wsDest = ThisWorkbook.Sheets("BaoCaoTongHop")
    If wsDest Is Nothing Then
        Set wsDest = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
        wsDest.Name = "BaoCaoTongHop"
    Else
        wsDest.Cells.ClearContents ' Xóa dữ liệu cũ nếu sheet đã tồn tại
    End If
    On Error GoTo 0

    firstRow = True

    For Each ws In ThisWorkbook.Worksheets
        If ws.Name  wsDest.Name Then ' Bỏ qua sheet đích
            Set rng = ws.UsedRange
            If Not rng Is Nothing Then
                If firstRow Then
                    rng.Copy Destination:=wsDest.Range("A1")
                    firstRow = False
                Else
                    lastRow = wsDest.Cells(Rows.Count, "A").End(xlUp).Row + 1
                    rng.Offset(1, 0).Resize(rng.Rows.Count - 1, rng.Columns.Count).Copy Destination:=wsDest.Range(wsDest.Cells(lastRow, "A"), wsDest.Cells(lastRow + rng.Rows.Count - 2, rng.Columns.Count))
                End If
            End If
        End If
    Next ws

    MsgBox "Đã gom dữ liệu xong vào sheet BaoCaoTongHop!", vbInformation
End Sub

Lưu ý:

  • Code này sẽ copy toàn bộ dữ liệu từ các sheet khác vào sheet 'BaoCaoTongHop'. Nếu bạn muốn bỏ qua dòng tiêu đề của các sheet nguồn, cần chỉnh sửa lại phần copy cho phù hợp.
  • Nếu các sheet có cấu trúc cột khác nhau, bạn cần xử lý thêm để đảm bảo dữ liệu được gom đúng.

Hy vọng chia sẻ này hữu ích cho mọi người. Nếu có cách nào tối ưu hơn, rất mong được chỉ giáo!

3

Hay quá bạn ơi! Cái vụ gom dữ liệu từ nhiều sheet này đúng là nỗi ám ảnh của dân văn phòng. Code của bạn giải quyết được vấn đề này thì quá tuyệt.

Mình cũng đang tò mò không biết nếu các sheet nguồn có cấu trúc cột hơi khác nhau (ví dụ: một sheet thiếu cột A, một sheet lại thừa cột Z) thì code của bạn có xử lý được không? Hay mình cần phải chuẩn hóa cấu trúc cột của các sheet nguồn trước khi chạy code nhỉ? Chia sẻ thêm cho mọi người với nha!

3

Tuyệt vời! Việc tự động hóa gom dữ liệu này đúng là "cứu cánh" cho những ai hay làm báo cáo. Code của bạn có xử lý trường hợp các sheet có cấu trúc cột không giống nhau không? Hay mình cần đảm bảo các sheet nguồn có cùng định dạng trước khi chạy code?

0

Rất hay! Mình cũng từng "vật lộn" với việc gom dữ liệu thủ công, tốn không ít thời gian. Code của bạn đã xử lý việc gom dữ liệu từ nhiều sheet vào một sheet mới là "BaoCaoTongHop" rồi, rất tiện lợi.

Cho mình hỏi thêm, nếu trong các sheet nguồn có cột bị thiếu hoặc thừa so với các sheet khác, code của bạn có tự động điều chỉnh để gom đủ dữ liệu không, hay mình cần đảm bảo cấu trúc cột của các sheet nguồn phải hoàn toàn giống nhau trước khi chạy code vậy bạn?

1

Bạn cần đăng nhập để trả lời chủ đề này.

Đăng nhập Đăng ký