Menu

App script quản lý rủi ro cho cá nhân & doanh nghiệp với báo cáo chuẩn định dạng biểu đồ

Tự động hóa việc tạo báo cáo động từ nhiều nguồn dữ liệu bằng VBA

Mùa Lâm Tuyền 25/03/2026 13:04 534 lượt xem 2 trả lời

Chào các bác, dạo này em đang loay hoay với việc tổng hợp dữ liệu từ nhiều file Excel khác nhau để tạo một báo cáo tổng hợp. Dữ liệu nguồn có cấu trúc tương đối giống nhau nhưng lại nằm rải rác ở nhiều file con. Việc copy-paste thủ công vừa tốn thời gian, vừa dễ sai sót.

Em đã thử tìm hiểu VBA và thấy nó khá tiềm năng. Có bác nào có kinh nghiệm trong việc dùng VBA để tự động hóa quá trình này không ạ? Cụ thể là:

  • Làm sao để VBA có thể đọc dữ liệu từ nhiều file Excel cùng lúc?
  • Cách nào để trích xuất và tổng hợp những thông tin cần thiết dựa trên một vài tiêu chí nhất định?
  • Có thể tự động cập nhật báo cáo khi dữ liệu nguồn thay đổi không?

Em mong nhận được sự chỉ dẫn hoặc chia sẻ code mẫu từ các cao thủ VBA để em có thể học hỏi và áp dụng. Em xin cảm ơn!

5

Chào bạn,

Vấn đề tự động hóa tổng hợp dữ liệu từ nhiều file là bài toán khá phổ biến và VBA xử lý rất tốt. Kinh nghiệm của mình thì thường sẽ:

1. Dùng Application.FileDialog(msoFileDialogFilePicker) để người dùng chọn nhiều file cùng lúc, hoặc nếu các file nằm trong một thư mục cố định thì có thể dùng FileSystemObject để duyệt qua tất cả file trong thư mục đó. 2. Sau khi có danh sách các file, dùng vòng lặp để mở từng file, copy dữ liệu cần thiết (ví dụ: từ một sheet cố định hoặc một vùng dữ liệu được xác định trước) rồi paste vào một file báo cáo chính.

Để trích xuất chính xác, bạn có thể thử dùng Range("A1").CurrentRegion nếu dữ liệu nguồn của bạn luôn bắt đầu từ A1 và không có dòng trống xen kẽ. Hoặc nếu có tiêu đề, bạn có thể tìm dòng cuối cùng dựa vào tiêu đề đó.

Bạn có thể cho biết cấu trúc dữ liệu nguồn cụ thể hơn không? Ví dụ, nó luôn nằm ở sheet nào, cột nào, hay có quy luật gì để xác định vùng dữ liệu cần lấy không?

3

Vấn đề này mình cũng từng gặp nè bạn. Để đọc dữ liệu từ nhiều file Excel cùng lúc, bạn có thể dùng vòng lặp For Each kết hợp với đối tượng Application.GetOpenFilename để người dùng chọn file, hoặc nếu bạn biết trước đường dẫn các file thì có thể lưu vào mảng rồi duyệt qua.

Sau đó, mỗi file mở ra, bạn có thể dùng Workbooks(TênFile).Sheets(TênSheet).Range(...) để lấy dữ liệu. Nếu cấu trúc file nguồn giống nhau thì việc trích xuất sẽ đơn giản hơn nhiều.

Bạn có thể chia sẻ thêm về cấu trúc dữ liệu nguồn và bạn muốn báo cáo tổng hợp cuối cùng trông như thế nào không? Như vậy mọi người sẽ dễ gợi ý cụ thể hơn.

3

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

Đăng nhập Đăng ký