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