Chào các bác, hôm nay em muốn chia sẻ một chút kinh nghiệm nhỏ về việc tự động hóa tạo báo cáo thống kê đơn giản bằng VBA. Tình huống của em là thường xuyên phải làm các báo cáo tổng hợp số liệu từ nhiều file excel nhỏ, mỗi file lại có cấu trúc gần giống nhau. Thay vì ngồi copy paste thủ công, em đã viết một đoạn code VBA để xử lý việc này.
Về cơ bản, code sẽ:
- Mở lần lượt các file excel trong một thư mục chỉ định.
- Sao chép dữ liệu từ một sheet cụ thể (ví dụ: 'Data') trong mỗi file.
- Dán vào một sheet tổng hợp trong file chính.
- Đóng file con lại sau khi sao chép.
Đoạn code minh họa cho việc lấy dữ liệu từ sheet 'Sheet1' của các file trong thư mục 'DataFiles':
Sub CombineData()
Dim FolderPath As String
Dim FileName As String
Dim wsDest As Worksheet
Dim wsSource As Worksheet
Dim LastRowDest As Long
Dim LastRowSource As Long
Set wsDest = ThisWorkbook.Sheets("Summary") ' Sheet đích để dán dữ liệu
FolderPath = ThisWorkbook.Path & "\DataFiles\" ' Đường dẫn đến thư mục chứa file excel con
FileName = Dir(FolderPath & "*.xls*") ' Lấy tên file đầu tiên
Application.ScreenUpdating = False ' Tắt cập nhật màn hình để code chạy nhanh hơn
Do While FileName ""
If FileName ThisWorkbook.Name Then ' Tránh mở chính file đang chạy code
Workbooks.Open FolderPath & FileName
Set wsSource = ActiveWorkbook.Sheets("Sheet1") ' Sheet nguồn cần lấy dữ liệu
LastRowDest = wsDest.Cells(Rows.Count, "A").End(xlUp).Row + 1 ' Tìm dòng cuối cùng ở sheet đích
LastRowSource = wsSource.Cells(Rows.Count, "A").End(xlUp).Row ' Tìm dòng cuối cùng ở sheet nguồn
' Copy dữ liệu từ sheet nguồn sang sheet đích
wsSource.Range("A2:Z" & LastRowSource).Copy wsDest.Range("A" & LastRowDest)
ActiveWorkbook.Close SaveChanges:=False ' Đóng file con mà không lưu
End If
FileName = Dir ' Lấy tên file tiếp theo
Loop
Application.ScreenUpdating = True ' Bật lại cập nhật màn hình
MsgBox "Đã tổng hợp xong dữ liệu!", vbInformation
End SubLưu ý: Các bạn cần chỉnh sửa tên sheet đích ("Summary"), sheet nguồn ("Sheet1"), đường dẫn thư mục (FolderPath) và phạm vi dữ liệu ("A2:Z") cho phù hợp với file của mình.
Cách này rất tiện lợi cho việc gom dữ liệu hàng ngày, hàng tuần. Có bác nào có cách làm hay hơn hoặc muốn thảo luận thêm về phần này không ạ?