Chào bạn,
Vấn đề bạn đang gặp phải khá phổ biến khi làm việc với nhiều file Excel. Việc tự động hóa copy dữ liệu từ nhiều file về một file tổng hợp bằng VBA là hoàn toàn khả thi.
Bạn đã thử tìm hiểu các giải pháp copy từ một file sang file khác rồi, vậy bạn có thể chia sẻ cụ thể hơn về cấu trúc thư mục chứa các file báo cáo đó không? Ví dụ: các file có cùng tên theo một quy luật nào đó, hay chúng nằm trong các thư mục con khác nhau? Thông tin này sẽ giúp mình đưa ra gợi ý chính xác hơn.
Nếu các file nằm chung trong một thư mục và bạn chỉ cần copy dữ liệu từ một sheet nhất định (ví dụ Sheet1) của mỗi file đó sang file tổng hợp, thì đoạn code sau có thể là một điểm khởi đầu tốt:
Sub CopyDataFromMultipleFiles()
Dim folderPath As String
Dim fileName As String
Dim wbSource As Workbook
Dim wsSource As Worksheet
Dim wbTarget As Workbook
Dim wsTarget As Worksheet
Dim lastRowTarget As Long
' Đặt đường dẫn đến thư mục chứa các file Excel
folderPath = "C:\Your\Folder\Path\" ' Thay bằng đường dẫn thực tế
' Đặt tên file Excel đích (file tổng hợp)
Set wbTarget = ThisWorkbook
Set wsTarget = wbTarget.Sheets("Sheet1") ' Thay "Sheet1" bằng tên sheet bạn muốn dán dữ liệu vào
fileName = Dir(folderPath & ".xls") ' Lấy tất cả các file có đuôi .xls, .xlsx, .xlsm
Application.ScreenUpdating = False ' Tắt cập nhật màn hình để code chạy nhanh hơn
Do While fileName ""
' Bỏ qua file tổng hợp hiện tại nếu nó nằm trong thư mục
If fileName wbTarget.Name Then
Set wbSource = Workbooks.Open(folderPath & fileName)
Set wsSource = wbSource.Sheets("Sheet1") ' Thay "Sheet1" bằng tên sheet bạn muốn copy
' Tìm dòng cuối cùng ở file đích để dán dữ liệu tiếp theo
lastRowTarget = wsTarget.Cells(Rows.Count, "A").End(xlUp).Row + 1
' Copy dữ liệu từ sheet nguồn sang sheet đích
wsSource.UsedRange.Copy wsTarget.Cells(lastRowTarget, 1)
wbSource.Close False ' Đóng file nguồn 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 "Đã copy dữ liệu thành công!", vbInformation
End Sub
Bạn nhớ thay thế đường dẫn thư mục và tên sheet cho phù hợp nhé.