Xin code VBA tổng hợp dữ liệu tích lũy thành dữ liệu mỗi ngày

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

Thanh Binh111

Thành viên chính thức
Tham gia
28/11/20
Bài viết
59
Được thích
16
Xin chào mọi người!

Mình có bài toán này nhờ mọi người giúp đỡ:

-Dữ liệu đầu vào của mình là mỗi ngày một file dữ liệu chứa danh sách tài khoản và số tiền nộp tích lũy của mỗi tài khoản tính tới hôm đó

-Sẽ có những trường hợp tài khoản có trong file ngày 1 nhưng ngày 3 không còn tồn tại và xuất hiện nữa

-Cũng sẽ có trường hợp tài khoản ngày 3 mới lập nên chỉ có trong danh sách ngày 3 về sau và không xuất hiện trong file ngày 1 và ngày 2

-File dữ liệu mỗi ngày lên tới hàng trăm ngàn dòng

Nhu cầu của mình là: thiết kế 1 file TỔNG, mỗi ngày đưa vào file dữ liệu danh sách nộp tiền tích lũy ngày đó, VBA tự động tính toán thành biểu như sheet “KET QUA MONG MUON”. Trong đó danh sách mỗi ngày phải cập nhật lại, đảm bảo tất cả tài khoản từ ngày 1 tới ngày hiện tại đều cần hiển thị và hiển thị số tiền nộp tương ứng mỗi ngày (tiền nộp trong ngày = tiền nộp tích lũy tới ngày đó – tiền nộp tích lũy tới ngày hôm qua). Đồng thời sau khi hoàn thành chỉ lưu lại sheet “KET QUA MONG MUON” là được.

Xin cảm ơn rất nhiều!
 

File đính kèm

  • TỔNG HỢP DỮ LIỆU TÍCH LŨY THÀNH DỮ LIỆU MỖI NGÀY.xlsb
    741.3 KB · Đọc: 20
Lần chỉnh sửa cuối:
Chào bạn, theo hướng dẫn của bạn, mình dùng Data model và Pivot table tổng hợp thì được kết quả như hình 1, nhưng:

-Hiện kết quả chỉ hiển thị số tiền nạp TÍCH LŨY mỗi ngày, mình cần biến đổi thành số tiền nạp TRONG NGÀY (= số tiền nạp tích lũy tới hôm nay - số tiền nạp tích lũy tới hôm qua).

-Để xử lý vấn đề trên mình (biết một chút VBA) dùng 1 file khác copy kết quả biểu TÍCH LŨY như hình 1 về và dùng phép tính để biến đổi từ giá trị TÍCH LŨY thành giá trị TRONG NGÀY của mỗi ngày, cách này hơi bất tiện cũng như "lằng nhằng", như hình 2.

Vậy, cho mình hỏi:

1.Nếu mình muốn hiển thị kết quả nạp tiền TRONG NGÀY ngay luôn trong pivot table hình 1 thì có cách gì không và làm như thế nào?

2.Nếu vấn đề 1 không thể giải quyết thì có cách gì giải quyết tối ưu nhất không?

Mình xin gửi kèm theo 5 file dữ liệu mỗi ngày, nhờ bạn tham khảo hỗ trợ ạ, cảm ơn nhiều!

Hình 1

View attachment 295509

Hình 2
View attachment 295510
Bài đã được tự động gộp:


Cảm ơn bạn đã hỗ trợ, nhưng vì dữ liệu mình mỗi ngày số dòng lên tới hàng trăm ngàn dòng tương đối lớn, nên mình hi vọng có thể dữ liệu mỗi ngày lưu ở 1 file, dữ liệu 1 tháng gồm 30 file sẽ lưu trong 1 thư mục, và dùng power query liên kết sau đó dùng pivot table để xử lý.
Note: mình có thể thêm 1 cột Ngày vào các file để phân biệt số liệu mỗi ngày.
Cảm ơn ạ!
Thử tải file này về để chung với thư mục chứa những file cần tổng hợp rồi bấm nút thử xem sao
 

File đính kèm

  • Tong_Hop.xlsb
    3.3 MB · Đọc: 23
Upvote 0
Chào bạn, bài #1 thật ra do dữ liệu mình nhiều quá nên là mình đơn giản hóa vấn đề để mọi người hỗ trợ phương hướng, là do mình thuyết minh vấn đề trong #1 không chuẩn xác, mình xin phép nêu lại vấn đề của mình:

-Mình có dữ liệu đầu vào là số liệu tích lũy nạp tiền của mỗi tài khoản mỗi ngày, số liệu mỗi ngày lưu ở 1 file riêng biệt (do số lượng bản ghi tương đối lớn) lưu trong 1 folder.

-Mong muốn dữ liệu đầu ra: một biểu liệt kê danh sách tất cả tài khoản từng tồn tại và số tiền nạp mỗi ngày tương ứng của mỗi tài khoản.

Hiện theo hướng dẫn của bạn, dùng Power Query và Pivot Table thì mình đã hoàn thành đến bước Pivot Table liệt kê mỗi tài khoản và số tiền tích lũy tương ứng mỗi ngày, còn bước cuối cùng là chuyển đổi từ dữ liệu tiền nạp TÍCH LŨY thành tiền nạp PHÁT SINH TRONG NGÀY thì mình đang dùng VBA, cụ thể là mình tạo thêm 1 sheet "BIEN DOI" và dùng VBA để chuyển đổi.

Mình xin gửi file mình hiện đang làm lên, do dung lượng file lớn nên mình đã xóa kết nối PQ và chuyển dữ liệu sau khi PQ và Pivot thành giá trị, nhờ bạn cũng như mọi người cho mình lời khuyên để tối ưu hóa lưu trình tổng hợp này.

Xin cảm ơn ạ!View attachment 295524
Sau khi tạo một trường date(ngày) cho mỗi một file ngày trong folder=> dùng Power query chập nó lại=>Nạp vào Data Model + viết hàm tích lũy, phát sinh=> Dùng Pivot Table trong Data Model là được bạn
 
Upvote 0
Sau khi tạo một trường date(ngày) cho mỗi một file ngày trong folder=> dùng Power query chập nó lại=>Nạp vào Data Model + viết hàm tích lũy, phát sinh=> Dùng Pivot Table trong Data Model là được bạn
Chào bạn, cảm ơn bạn, nhờ bạn hướng dẫn mình viết hàm “phát sinh” trong Data Model với ạ!
 
Lần chỉnh sửa cuối:
Upvote 0
Chào bạn, cảm ơn bạn đã hỗ trợ!

Mình làm giống hướng dẫn của bạn nhưng sau khi Refresh thì nó báo lỗi như hình.

Vấn đề quan trọng hơn là, theo cách làm của bạn thì mới chỉ đến bước hiển thị danh sách hội viên và số tiền nạp tích lũy mỗi ngày, cái mình cần là phải biến đổi thành danh sách hội viên và số tiền nạp trong ngày của mỗi ngày (= số tiền nạp tích lũy tới hôm nay - số tiền nạp tích lũy tới hôm qua) ạ.

Trong tin nhắn mình rep lúc "Hôm nay lúc 17:38" thì mình đã làm được tới bước như bạn, hiện đang chưa tìm ra phương án "biến đổi thành danh sách hội viên và số tiền nạp trong ngày của mỗi ngày" tối ưu, (hiện thì sau khi mình tổng hợp đc danh sách tổng nạp tích lũy mỗi ngày thì mình dùng file khác copy sang và biến đổi, cách này phải làm thêm 1 file mới và tăng thêm thao tác và thời gian, mình hi vọng có thể biến đổi ngay trong file bảng Pivot luôn).

Cảm ơn bạn!View attachment 295521
Sau khi tìm hiểu nguyên nhân,
Bạn Fix giúp tôi lỗi này nhé, có liên quan đến Privacy của Power Query.
Bạn Click phải chuột vào Query "CaNguF1" => Edit
Cửa sổ Power Query mở ra => File => Options and Settings => Query Options => Tích chọn "Ignore the Privacy Levels anh potentially improve performance" => OK
Refresh lại Data.
Tôi thử so sánh kết quả chạy với Code VBA của anh @Quang_Hải thì khớp. Tất nhiên về tốc độ thì của anh Hải cực nhanh và code cực kỳ ngắn gọn rồi
1696861595500.png
 
Upvote 0
Sau khi tìm hiểu nguyên nhân,
Bạn Fix giúp tôi lỗi này nhé, có liên quan đến Privacy của Power Query.
Bạn Click phải chuột vào Query "CaNguF1" => Edit
Cửa sổ Power Query mở ra => File => Options and Settings => Query Options => Tích chọn "Ignore the Privacy Levels anh potentially improve performance" => OK
Refresh lại Data.
Tôi thử so sánh kết quả chạy với Code VBA của anh @Quang_Hải thì khớp. Tất nhiên về tốc độ thì của anh Hải cực nhanh và code cực kỳ ngắn gọn rồi
View attachment 295549
Vâng, để mình check thử lại, một lần nữa cảm ơn bạn ạ!
 
Upvote 0
Web KT
Back
Top Bottom