Menu

Tự động hóa việc tạo báo cáo theo tháng từ dữ liệu gốc bằng VBA

Quản Bằng Thu 22/03/2026 04:30 194 lượt xem 3 trả lời

Chào các anh chị em trong diễn đàn,

Hiện tại mình đang có một file Excel chứa dữ liệu bán hàng của cả năm, mỗi dòng là một giao dịch. Mình muốn tự động hóa việc tạo ra các báo cáo riêng cho từng tháng. Ví dụ, khi chọn tháng 1 thì nó sẽ lọc ra toàn bộ dữ liệu của tháng 1 và copy sang một sheet mới có tên là 'Thang 01'. Tương tự với các tháng còn lại.

Mình đã thử lọc thủ công nhưng với số lượng giao dịch lớn thì rất mất thời gian. Mình nghĩ VBA có thể làm được việc này. Có anh chị nào đã từng làm qua hoặc có đoạn code mẫu cho trường hợp này không ạ? Mình cần lấy dữ liệu từ sheet 'DuLieuGoc' và tạo các sheet mới theo tên tháng.

Cụ thể, mình muốn:

  • Tạo một UserForm đơn giản với một ComboBox để chọn tháng (từ 1 đến 12).
  • Khi chọn tháng và nhấn nút 'Tạo báo cáo', VBA sẽ tự động:
  • Tạo một sheet mới nếu chưa có, với tên tương ứng với tháng đã chọn (ví dụ: 'Thang 01', 'Thang 02',...).
  • Copy toàn bộ dữ liệu từ sheet 'DuLieuGoc' mà có ngày thuộc tháng đã chọn sang sheet mới này.
  • Nếu sheet đã tồn tại, nó sẽ xóa dữ liệu cũ và cập nhật dữ liệu mới.

Mình mới tập tành VBA nên còn nhiều bỡ ngỡ. Rất mong nhận được sự giúp đỡ từ các cao thủ ạ. Xin cảm ơn!

5

Hay quá, ý tưởng này mình cũng từng áp dụng khi cần tổng hợp dữ liệu theo từng đơn vị. Cách bạn dùng vòng lặp để duyệt qua các tháng và lọc dữ liệu là rất hợp lý.

Để code chạy mượt mà hơn nữa, bạn có thể thử kết hợp thêm hàm WorksheetFunction.CountIf để kiểm tra xem sheet báo cáo tháng đó đã tồn tại chưa. Nếu chưa có thì mới tạo, tránh bị lỗi ghi đè hoặc tạo trùng sheet.

Bạn có thể chia sẻ định dạng cột chứa ngày tháng trong file dữ liệu gốc không? Ví dụ, nó là định dạng dd/mm/yyyy hay mm/yyyy chẳng hạn? Thông tin này sẽ giúp mọi người hỗ trợ bạn chính xác hơn đó.

1

Chào bạn,

Vấn đề bạn đang gặp phải mình cũng từng vướng mắc lúc mới làm quen với VBA. Việc tự động hóa tạo báo cáo theo tháng bằng VBA là hoàn toàn khả thi và sẽ tiết kiệm rất nhiều thời gian so với làm thủ công.

Bạn có thể tham khảo cách này: 1. Dùng vòng lặp để duyệt qua từng tháng (từ 1 đến 12). 2. Với mỗi tháng, bạn lọc dữ liệu trong sheet gốc dựa trên cột ngày tháng. 3. Sau đó, copy toàn bộ dữ liệu đã lọc sang một sheet mới, đặt tên theo tháng (ví dụ: "Thang 01", "Thang 02",...).

Bạn có thể chia sẻ cấu trúc sheet dữ liệu gốc của bạn không? Ví dụ như tên cột chứa ngày tháng bán hàng là gì? Như vậy mình có thể gợi ý code cụ thể hơn.

Chúc bạn thành công!

4

Chào bạn,

Ý tưởng tự động hóa tạo báo cáo theo tháng bằng VBA của bạn rất hay! Mình cũng đã từng làm một dự án tương tự để xử lý dữ liệu bán hàng theo quý.

Ngoài cách lọc và copy như bạn nói, bạn có thể cân nhắc thêm việc sử dụng AutoFilter kết hợp với việc tạo sheet mới. Cách này sẽ giúp code gọn gàng hơn một chút.

Bạn có thể cho biết cột chứa ngày tháng trong dữ liệu gốc của bạn tên là gì không? Biết được thông tin này sẽ giúp mình và mọi người dễ dàng đưa ra gợi ý code chuẩn xác hơn đó!

5

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

Đăng nhập Đăng ký