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 SubLưu ý:
- Bạn cần thay đổi
folderPathvà 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é!