Menu

Tự động cập nhật dữ liệu từ nhiều file Excel về một file tổng hợp bằng VBA

Liêu Nhật Lành 09/06/2026 06:16 251 lượt xem 2 trả lời

Chào mọi người,

Dạo này mình đang phải xử lý một lượng lớn dữ liệu được lưu trữ rải rác trong nhiều file Excel khác nhau. Mỗi file lại là dữ liệu của một chi nhánh, và sếp yêu cầu mình tổng hợp tất cả về một file duy nhất để tiện theo dõi và báo cáo.

Ban đầu mình định copy-paste thủ công, nhưng số lượng file quá nhiều, làm đi làm lại rất tốn thời gian và dễ sai sót. Sau một hồi tìm hiểu, mình đã viết được một đoạn code VBA nho nhỏ để tự động hóa việc này. Nay chia sẻ lên đây để anh em nào gặp tình huống tương tự có thể tham khảo.

Nguyên lý hoạt động:

  • Code sẽ duyệt qua tất cả các file Excel trong một thư mục chỉ định.
  • Với mỗi file tìm thấy, nó sẽ mở file đó ra, copy toàn bộ dữ liệu từ một sheet nhất định (ví dụ: sheet 'Data') và dán vào cuối sheet 'Tổng hợp' trong file chính.
  • Cuối cùng, đóng các file đã xử lý mà không lưu thay đổi.

Code VBA tham khảo:

Sub GhepFileExcel()
    Dim folderPath As String
    Dim fileName As String
    Dim wbSource As Workbook
    Dim wsSource As Worksheet
    Dim wsTarget As Worksheet
    Dim lastRowTarget As Long

    '--- Thiết lập ---
    folderPath = "C:\DuLieuExcel\" ' Thay đổi đường dẫn thư mục chứa các file cần ghép
    Set wsTarget = ThisWorkbook.Sheets("TongHop") ' Tên sheet đích trong file hiện tại
    '--- Kết thúc thiết lập ---

    Application.ScreenUpdating = False

    fileName = Dir(folderPath & "*.xls*")

    Do While fileName  ""
        If fileName  ThisWorkbook.Name Then ' Bỏ qua chính file đang chạy code
            Set wbSource = Workbooks.Open(folderPath & fileName)
            Set wsSource = wbSource.Sheets("Data") ' Tên sheet nguồn trong các file con

            ' Tìm dòng cuối cùng có dữ liệu trong sheet đích
            lastRowTarget = wsTarget.Cells(Rows.Count, "A").End(xlUp).Row

            ' Copy dữ liệu từ sheet nguồn và dán vào sheet đích
            wsSource.UsedRange.Copy
            wsTarget.Cells(lastRowTarget + 1, "A").PasteSpecial xlPasteValues

            wbSource.Close SaveChanges:=False
        End If
        fileName = Dir
    Loop

    Application.ScreenUpdating = True
    MsgBox "Đã ghép xong dữ liệu!", vbInformation
End Sub

Lưu ý:

  • Bạn cần thay đổi folderPath và tên các sheet ("TongHop", "Data") cho phù hợp với cấu trúc file của bạn.
  • Code này chỉ copy giá trị (Values) để tránh lỗi định dạng. Nếu bạn muốn copy cả định dạng, hãy thay xlPasteValues bằng xlPasteAll.
  • Đảm bảo tất cả các file Excel nguồn đều có sheet tên là "Data" (hoặc tên bạn đã sửa).

Hy vọng chia sẻ này hữu ích với mọi người. Nếu có thắc mắc hoặc cách làm hay hơn, mọi người cùng thảo luận nhé!

3

Tuyệt vời, cảm ơn bạn đã chia sẻ đoạn code VBA này! Mình cũng từng đau đầu với việc tổng hợp dữ liệu từ nhiều file như vậy.

Mình có một thắc mắc nhỏ: Code của bạn có xử lý được trường hợp các file nguồn có cấu trúc cột không giống nhau không? Hay nó mặc định là các cột phải tương đồng?

Nếu có thể, bạn có thể chia sẻ thêm về cách bạn xử lý các trường hợp ngoại lệ (ví dụ: thiếu cột, thừa cột, sai định dạng ngày tháng...) không? Mình tin là nhiều anh em cũng sẽ quan tâm đến điểm này đấy!

3

Hay quá bạn ơi! Mình cũng đang bí bài toán tương tự. Việc tổng hợp dữ liệu thủ công đúng là tốn thời gian và dễ sai sót thật.

Đoạn code VBA của bạn có vẻ rất hữu ích. Không biết bạn có thể chia sẻ thêm về cách bạn xử lý trường hợp các file nguồn có định dạng tên cột hơi khác nhau một chút không? Ví dụ, có file thì ghi "Mã KH", có file lại ghi "Khách hàng ID". Liệu code có tự nhận diện và gộp chung được không?

Cảm ơn bạn đã chia sẻ!

2

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

Đăng nhập Đăng ký