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 đồ

Hỗ trợ lấy dữ liệu từ nhiều sheet theo điều kiện bằng VBA

Kha Cảnh Trị 19/03/2026 02:24 279 lượt xem 2 trả lời

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

Hiện tại mình đang làm một file báo cáo tổng hợp từ nhiều file con, mỗi file con lại có nhiều sheet. Mình muốn dùng VBA để lấy dữ liệu từ các sheet này về một sheet tổng hợp, nhưng có một điều kiện lọc. Cụ thể là mình chỉ muốn lấy những dòng dữ liệu có 'Trạng thái' là 'Hoàn thành' và 'Ngày' trong khoảng từ đầu tháng đến cuối tháng hiện tại.

Mình đã thử tìm hiểu nhưng hơi lúng túng ở phần kết hợp điều kiện và vòng lặp qua các sheet. Có anh chị nào có kinh nghiệm hoặc có đoạn code mẫu có thể chia sẻ giúp mình không ạ? Mình xin cảm ơn!

Về cấu trúc dữ liệu, mỗi sheet có các cột như sau:

  • Mã đơn hàng
  • Tên khách hàng
  • Sản phẩm
  • Số lượng
  • Đơn giá
  • Thành tiền
  • Ngày
  • Trạng thái

Mình muốn tổng hợp các cột này sang một sheet mới có tên là 'BaoCaoTongHop'.

Rất mong nhận được sự giúp đỡ từ cộng đồng!

3

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 dữ liệu. Để lấy dữ liệu từ nhiều sheet theo điều kiện bằng VBA, bạn có thể kết hợp vòng lặp qua từng sheet và sử dụng các câu lệnh If để kiểm tra điều kiện 'Trạng thái' và 'Ngày'.

Đối với điều kiện 'Ngày', bạn có thể dùng hàm DateSerial để xác định ngày đầu tháng và cuối tháng hiện tại một cách linh hoạt, thay vì phải nhập cố định. Ví dụ:

Dim ngayDauThang As Date
Dim ngayCuoiThang As Date
ngayDauThang = DateSerial(Year(Date), Month(Date), 1)
ngayCuoiThang = DateSerial(Year(Date), Month(Date) + 1, 0) ' Ngày cuối tháng trước của tháng kế tiếp

Bạn có thể chia sẻ thêm cấu trúc đặt tên sheet hoặc một đoạn code bạn đã thử làm không? Như vậy mình sẽ dễ hình dung và góp ý chi tiết hơn.

1

Chào bạn,

Vấn đề bạn đang gặp phải rất thú vị, đặc biệt là phần kết hợp nhiều điều kiện và lặp qua các sheet. Mình nghĩ bạn có thể tham khảo cách dùng Collection hoặc Dictionary để lưu trữ dữ liệu tạm thời trước khi ghi ra sheet tổng hợp. Điều này sẽ giúp code gọn gàng hơn và tránh việc ghi đè dữ liệu không mong muốn.

Ngoài ra, để xử lý điều kiện ngày tháng, bạn có thể sử dụng Application.WorksheetFunction.EoMonth(Date, 0) để lấy ngày cuối tháng hiện tại, hoặc DateSerial(Year(Date), Month(Date), 1) cho ngày đầu tháng.

Bạn có thể chia sẻ thêm về cách bạn đang structure dữ liệu trên các sheet con không? Ví dụ, tên cột cho 'Trạng thái' và 'Ngày' có giống nhau ở tất cả các sheet không?

1

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

Đăng nhập Đăng ký