Menu

Tự động hóa việc tạo báo cáo tổng hợp từ nhiều file Excel con

Cầm Sáng Uyển 04/06/2026 04:42 234 lượt xem 3 trả lời

Chào mọi người,

Dạo này mình được sếp giao cho một nhiệm vụ khá 'hóc búa' là tổng hợp số liệu từ hàng chục file Excel con của các chi nhánh về một file báo cáo tổng. Ban đầu mình định làm thủ công nhưng với số lượng file lớn như vậy thì mất rất nhiều thời gian và dễ sai sót. Sau khi mày mò, mình đã tìm ra một giải pháp dùng VBA để tự động hóa việc này. Nay chia sẻ lên đây để anh em nào đang gặp tình huống tương tự có thể tham khảo.

Ý tưởng chính:

  • Tạo một file Excel 'báo cáo tổng'.
  • Sử dụng VBA để duyệt qua tất cả các file Excel con trong một thư mục chỉ định.
  • Mở từng file con, copy dữ liệu cần thiết (ví dụ: các dòng thỏa mãn điều kiện nào đó hoặc toàn bộ dữ liệu từ một sheet cụ thể).
  • Dán dữ liệu đó vào sheet 'báo cáo tổng'.
  • Đóng file con lại và tiếp tục với file tiếp theo.

Đoạn code minh họa (cần tùy chỉnh cho phù hợp với cấu trúc file của bạn):

Sub TongHopDuLieu() 
 Dim folderPath As String 
 Dim fileName As String 
 Dim wbSource As Workbook 
 Dim wsSource As Worksheet 
 Dim wsTarget As Worksheet 
 Dim lastRowTarget As Long 
 
 folderPath = "C:\DuLieuCon\" ' Thay đổi đường dẫn thư mục chứa file con 
 Set wsTarget = ThisWorkbook.Sheets("BaoCaoTong") ' Sheet đích trong file tổng 
 
 fileName = Dir(folderPath & "*.xls*") ' Lấy tất cả file excel 
 
 Application.ScreenUpdating = False ' Tắt cập nhật màn hình để tăng tốc 
 
 Do While fileName  "" 
 Set wbSource = Workbooks.Open(folderPath & fileName) 
 Set wsSource = wbSource.Sheets(1) ' Giả sử dữ liệu ở sheet 1 của file con 
 
 lastRowTarget = wsTarget.Cells(Rows.Count, "A").End(xlUp).Row + 1 
 
 ' Copy dữ liệu từ sheet nguồn sang sheet đích (ví dụ: copy toàn bộ A1:Z100) 
 wsSource.Range("A1:Z100").Copy wsTarget.Cells(lastRowTarget, "A") 
 
 wbSource.Close SaveChanges:=False 
 fileName = Dir 
 Loop 
 
 Application.ScreenUpdating = True 
 MsgBox "Đã tổng hợp xong dữ liệu!" 
 End Sub

Lưu ý:

  • Bạn cần thay đổi folderPath và tên sheet đích (wsTarget) cho phù hợp.
  • Cấu trúc copy dữ liệu wsSource.Range("A1:Z100").Copy wsTarget.Cells(lastRowTarget, "A") cũng cần điều chỉnh theo yêu cầu cụ thể (ví dụ: copy toàn bộ sheet, copy theo điều kiện, copy từ dòng thứ mấy...).
  • Nên sao lưu dữ liệu trước khi chạy code.

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

5

Hay quá bạn ơi! Vụ tổng hợp báo cáo từ nhiều file này đúng là đau đầu thật. Mình cũng từng vật lộn với việc này, mà mỗi lần làm thủ công là mệt rã rời.

Bạn có thể chia sẻ rõ hơn về đoạn code VBA bạn dùng để duyệt qua các file con không? Mình đang tò mò không biết bạn xử lý các trường hợp tên sheet khác nhau hay cấu trúc file con không đồng nhất thế nào.

0

Hay quá bạn ơi! Vụ tổng hợp báo cáo từ nhiều file này đúng là đau đầu thật. Mình cũng từng vật lộn với việc này, mà mỗi lần làm thủ công là mệt rã rời.

Bạn có thể chia sẻ rõ hơn về đoạn code VBA bạn dùng để duyệt qua các file con không? Mình đang tò mò không biết bạn xử lý các trường hợp tên sheet khác nhau hay cấu trúc file con không đồng nhất thế nào.

2

Hay quá bạn ơi! Vụ tổng hợp báo cáo từ nhiều file này đúng là đau đầu thật. Mình cũng từng vật lộn với việc này, mà mỗi lần làm thủ công là mệt rã rời.

Bạn có thể chia sẻ rõ hơn về đoạn code VBA bạn dùng để duyệt qua các file con không? Mình đang tò mò không biết bạn xử lý các trường hợp tên sheet khác nhau hay cấu trúc file con không đồng nhất thế nào.

0

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

Đăng nhập Đăng ký