Tổng hợp theo 4 điều kiện

Liên hệ QC

thuyloitienlu

Thành viên chính thức
Tham gia
17/4/08
Bài viết
58
Được thích
0
Xin chào tất cả các bạn trên diễn đàn. Tôi mới tham gia diễn đàn và chưa biết nhiều về VBA tôi muốn nhờ tất cả các bạn trên diễn đàn tạo cho tôi 1 macro để làm công việc sau:
Tôi có 1 bảng bán hàng như sau:
Cột A là số thứ tự quầy bán (từ 1 đến hết và không trùng nhau)
Cột B là số thứ tự lô hàng (từ 1 đến hết theo từng quầy)
Cột C là doanh thu bán được (đồng)
Cột D là mã loại hàng: ví dụ A01, A02, ...B01, B02,...C01, C02...ABC100, ABC101... (các mã này trong cột có thể trùng nhau, gồm n mã hàng)
Và có 6 cột CVV (101), CX (102), CY(103), CZ(104), DA(105), DB(106) tương ứng với 6 đại lý bán hàng. Mỗi cột gồm các số thứ tự của các quầy bán (tương ứng với cột A). Ví dụ
cột 101 là : 10,11,12,13
cột 102 là: 6,7,8,9
….
cột 106 là: 1,2,3,4,5
các số trong 6 cột này liên tục từ 1 đến hết và không trùng nhau.Có thể chỉ tồn tại 1 đại lý , hoặc 2 , … đến 6 đại lý. Tất cả các giá trị này thay đổi theo từng tháng.
Vậy viết code thế nào để tổng hợp được ra bảng như sau:
Cột 10 gồm số thứ tự đại lý bán hàng (từ 1 đến 6)
Cột 11 gồm số thứ tự quầy bán (tương ứng với cửa hàng đó)
Cột 12 là : tổng tiền giá trị tiền của từng lô hàng bán được. (đơn vị đồng)
Côt 13 là: tổng số loại hàng của 1 lô hàng.
cột 16 đến cột thứ n(mã hàng + 15) mỗi ô cell là tổng số tiền của từng loại hàng.
Tôi có file ví dụ kèm theo nhờ các bạn xem giúp tôi. Xin cảm ơn.
 

File đính kèm

Bạn dùng Pivot table sẽ như ý
file kem theo là minh họa còn tùy biến thế nào do bạn.
 

File đính kèm

Upvote 0
- Định làm cho bạn nhưng mà cái bảng tổng hợp của bạn lủng củng quá...chằng biết đâu mà lần, chưa hiểu được đầu bài thì làm nỗi gì....cái đầu bài của bạn đâu cần dùng đến đao to búa lớn VBA làm gì cho mệt.
- Không biết đúng ý bạn không, tớ cũng dùng Privot table cho bạn
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn tất cả các bạn đã quan tâm trả lời câu hỏi của tôi, diễn đàn GPE thật nhiêt tình và tận tâm giúp đõ mọi người. Tôi muốn làm thành Macro để chạy tự động vì số liệu nguồn của tôi luôn thay đổi.
Cảm ơn bạn TranSongNgocQuan đã viết code chạy ra đúng ý tôi, nhờ bạn viết nốt code đó để nó chạy ra các ô tiếp theo là tổng tiền của từng loại hàng, và hàng cộng tổng tiền của từng đại lý, các cửa hàng không có loại hàng nào đó thì ghi ô céll đó = 0. Bạn sử giùm 2 ý sau:
1- với cột STT Đại lý chạy ra không đúng (toàn là 1) đúng ra phải lần lượt là 1, 2 , 6 (ứng với stt của dòng Đại lý 1 , Đại lý 2, Đại lý 6 (cột thứ 101,102,106).
2- Cột Tổng loại hàng phải bằng tổng số lượng hàng trong cột Mã hàng theo từng cửa hàng (cột 1) =(đếm số lượng hàng)
3- Tính tổng tiền của từng đại lý và tổng tất cả các đại lý.

Với số đại lý thay đổi từ 1 đến 6 và số cửa hàng và số loại hàng luôn thay đổi (không giới hạn số lượng). Lần nữa nhờ bạn viết giùm nốt, tôi có file kèm theo, Trân thành cảm ơn bạn.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Chào bạn, mình nghĩ với Privot table mình làm cho bạn ở bài #3 hoàn toàn đáp ứng được yêu cầu của bạn.

- Khi thay đổi đại lý, bạn cập nhật trong vùng CY6-CZ16

- Số thứ tự lô hàng có cần thiết phải cho vào bảng tổng hợp ko? Nếu cần bản chỉ cẩn kéo thả trường này vào Columns

- Sau khi thay đổi dữ liệu, bạn cập nhật cho Privot table bằng cách Refresh (click phải chuột trong vùng Privot table và chọn Refresh data.

- Bạn có thể mở rộng vùng data cho Privot table để thoải mái cập nhật dữ liệu mới.

(Mình ko can ngăn bạn dùng VBA nhưng nên dùng công cụ tổng hợp sẵn có của MS tiện dụng hơn và cực kỳ chính xác).

------------------------------

(Mình chưa hiểu rõ trong bảng TH của bạn có mục "Tên quầy bán" nhưng ko thấy trong vùng data )

- Nếu cần hiểu rõ và bổ xung, bạn cứ hỏi mình sẵn sàng giúp đỡ. Thân!
 
Lần chỉnh sửa cuối:
Upvote 0
Chào bạn, mình nghĩ với Privot table mình làm cho bạn ở bài #3 hoàn toàn đáp ứng được yêu cầu của bạn.

- Khi thay đổi đại lý, bạn cập nhật trong vùng CY6-CZ16

- Số thứ tự lô hàng có cần thiết phải cho vào bảng tổng hợp ko? Nếu cần bản chỉ cẩn kéo thả trường này vào Columns

- Sau khi thay đổi dữ liệu, bạn cập nhật cho Privot table bằng cách Refresh (click phải chuột trong vùng Privot table và chọn Refresh data.

- Bạn có thể mở rộng vùng data cho Privot table để thoải mái cập nhật dữ liệu mới.

(Mình ko can ngăn bạn dùng VBA nhưng nên dùng công cụ tổng hợp sẵn có của MS tiện dụng hơn và cực kỳ chính xác).
Tôi có 1 vài ý kiến nhé:
  1. Trong trường hợp này tôi cũng đồng tình cùng bạn phamnhukhang là sử dụng pivottable, và có thể dùng nhiều pivottable cùng nguồn data để tổng hợp nhiều hướng.
  2. Không cần chọn dự phòng vùng trống trong data của pivot mà đặt 1 Name cho vùng data, dùng offset trong Name để lấy hết vùng data dù có nhập thêm.
  3. Ý kiến là vậy nhưng cũng tùy ý tác giả vậy, có lẽ tác giả muốn nhấn 1 cái cho nó Pro --=0.
 
Upvote 0
Cảm ơn hai bạn Viendo và Phamnhukhang, vì bài toán của mình còn liên quan các yêu cầu khác nữa, và cũng để cho tiện sử dụng mình muốn làm bằng VBA hơn (dùng các thanh công cụ của Excel thì rất chính xác nhưng phải dùng nhiều thao tác bấm chuột và không liên kết được với các bài toán khác). Vậy các bạn có cách nào lập bằng VBA giúp mình với ?Bạn TranSongNgocQuan đã viết cho tôi bằng VBA gần đúng bài toán rồi, các bạn xem và bổ sung cho tôi với .
 
Upvote 0
Tổng hợp theo 4 điều hiện

Cảm ơn bạn TranSongNgocQuan rất nhiều, bạn thật nhiệt tình giúp đỡ mpị người, bạn giải bài toán rất đúng ý tôi, đúng lòng mong mỏi của tôi. Còn phần nhỏ này nữa bạn giúp nốt tôi với nhé.
1- Ở cột Tổng loại hàng (đếm số lượng lô hàng) ở đại lý 1 chưa đúng (đúng là: ở quầy bán 1 phải = 20, quầy 3 phải =18 mới đúng), còn các đại lý sau rất đúng.
2- Vì số lượng Mã hàng có thể thay đổi số lượng Mã (ví dụ thêm mã X01, Y01, ...) thì chương trình có tổng hợp số lượng nhương chưa tự động nhặt mã đó lên bảng. số lượng dòng của bảng sẽ thay đổi theo số Đại lý , số quầy còn số cột sẽ thay đổi theo Mã hàng.
Vậy nhờ bạn lần nữa bớt chút thời gian giúp tôi với nhé, kiến thức về VBA rộng lớn quá. Cảm ơn bạn rất nhiều.Tôi có file kèm theo.
 

File đính kèm

Upvote 0
cảm ơn bạn TransongngocQuan nhiều, kiến thức về lập trình và cách sử dụng các hàm mảng Excel của bạn thật tài tình, áp dụng rất linh hoạt thật xứng đáng là 1 cao thủ trong thiên hạ.Tôi rất mong từ bài toán này mà học được nhiều điều bổ ích cho kỹ thuật VBA. Theo yêu cầu cảu bảng giao nộp thống kê thì còn vấn đề nữa bạn lại giúp tôi với nhé, tôi có làm ở file ví dụ này.
- Lấy luôn tiêu đề của các cột CVV (Đại Lý 1),...cho vào cột STT Đại lý của bảng tổng hợp, còn ở cột "ghi chú 1" thì = cột Tổng tiền - cột mã loại hàng AB50, D02, D03 (tương ứng với 3 cột Y, AA, AB) trên ví dụ), còn cột "Ghi chú 2" = ghi chú 1 / cột Tổng loại hàng
 

File đính kèm

Upvote 0
Thú thật bạn transongngocquan rất nhiệt tình, yêu cầu của thuyloitienlu không rõ ràng mà bạn hòan thành OK. Vậy mới nghĩ hd là phải biết hiểu những yêu cầu của người khác.
Cám ơn transongngocquan nhiều. Góp ngu ý 1 chút, nếu đã dùng VBA thì nên dùng thêm
1/ .value = .value
Nhằm giảm dung lượng file.
2/ Có thể dùng sumproduct thay thế {sum(....)...} sẽ nhanh hơn 1 chút.
3/ Lấy giá trị duy nhất cột D (mã hàng) = AdFilter xong thì chỉ cần copy paste transpose => chuyển dọc thành ngang.
4/ Đầu tiên vào thì clearformats, làm xong thì formats lại và tách code format ra 1 code phụ.
5/ Trong bài, theo tôi hiểu là muốn tính theo đại lý, ie đại lý 1: QH1,2,3; Dl2: 4,5,6; DL3: 7... Vậy nên đề bài nên có yêu cầu thành 1 bảng danh mục.
6/ Còn bút tóan sum theo từng lọai thì dùng như sau sẽ nhanh hơn.
Làm xong hết bảng, dùng 1 vòng for i =EndRow to FirstRow step -1 và khi gặp daily <> daily thì insert row và gám sum
Vài lời góp ý. Đừng giận nhé!
Chúc thành công!
 
Upvote 0
Bạn transongngocquan ơi, code của bạn thật tuyệt vời, rất đúng ý.còn chút xíu nữa lại làm phiền bạn rồi.
- Ở cột Ghi chú 1 = cột M trừ giá trị tiền tương ứng với 3 loại mã hàng là AB50 và D02 và D03 (3 loại mã hàng này vị trí cột có thể thay đổi theo bảng dữ liệu hàng tháng, và có thể không có) chứ không phải cố định là cột Y, AA, AB bạn sửa giúp tôi nhé.
- Có thể sắp xếp các cột mã loại hàng theo 1 thứ tự nhất định được không (ví dụ sắp xếp theo B01, B02, B03,A01, A02 ...các thứ tự này tôi đã gán vào 1 hàng trong SHEET đó ? bạn xem file và
làm giúp tôi nhé. Lần nữa cám ơn bạn rất nhiều.
 

File đính kèm

Upvote 0
Bạn Tran Song Ngoc Quan thật nhiệt tình với mình. Cảm ơn bạn thật nhiều. Để mình chạy thử lại nha. Nếu có gì trục trặc nhờ bạn giúp đỡ. Chúc bạn luôn mạnh khỏe, hạnh phúc và thành đạt.

Bạn Transongngocquan ơi giúp tôi với nhé. Bạn xem có cách nào chỉnh cho code chạy nhanh lên được không ? Tôi về chạy thử với dữ liệu là 15000 dòng thì nó chạy mất 30 phút. và bạn chỉnh lại giúp ở cột thứ 2 (cột Số TT quầy) thì các Tổng phải là số thứ tự các tổng từ 1 đến hết (không phải là số thứ tự đại lý). Bạn bớt chút thời gian xem lại giùm tôi nhé. Cảm ơn bạn nhiều.
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Tôi chỉnh sửa lại rồi, máy tôi chạy khoảng 2 phút mấy đó.
 

File đính kèm

Upvote 0
Cảm ơn bạn đã nhiệt tình giúp mình.Tôi chạy lại thấy nhanh hơn rất nhiều rồi (khoảng 2 phút thôi). Bạn ơi các dòng tổng chưa tính hết từ (đoạn cuối đều = 0 hết nên ô tổng bị sai, bạn xem lại giúp tôi nhé.
 
Upvote 0
Bạn Transongngocquan ơi, lại phải cầu cứu bạn lần nữa. ở cột Tổng loại hàng thì = tổng số lượng của tất cả các lô hàng - số lượng lô hàng của các mã hàng AB50 - D01 - D02. Phiền bạn giúp cho toi lần nữa. Xin cảm ơn nhiều.
 

File đính kèm

Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom