Giúp lọc dữ liệu từ nhiều sheet và tính tổng (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Tunguyen

Thành viên mới
Tham gia
6/10/07
Bài viết
25
Được thích
2
Chào các bác, em là người mới tham gia diễn đàn, về VBA thì mới dừng ở mức ghi Macro rồi bắt chước. Vì thế em muốn nhờ mọi người giúp em code VBA cho file sau của em.
Em có dữ liệu các mặt hàng và số lượng từ nhiều sheet, em cần tổng kết các mặt hàng đó vào 1 sheet và lấy số tổng số lượng ( như file đính kèm ).
Các bác giúp em với, em cảm ơn trước.
 

File đính kèm

Bài này đâu cần VBA. Chỉ dùng công thức là được rồi.
Bạn xem thử nhé!
 

File đính kèm

duongsatdn đã viết:
Bài này đâu cần VBA. Chỉ dùng công thức là được rồi.
Bạn xem thử nhé!
Cái này chưa ồn lắm... vì món quan trọng nhất ở đây là lấy dc danh sách các mặt hàng đấy... Lấy xong rồi thì mới tính tới tỗng cộng chứ... Ở đây chỉ có vài mặt hàng, còn thực tế nó đến hàng trăm, thậm chí là hàng ngàn... Ai ngồi lọc nổi mấy mặt hàng này bằng cách gõ gõ?
 
duongsatdn đã viết:
Bài này đâu cần VBA. Chỉ dùng công thức là được rồi.
Bạn xem thử nhé!

Không phải vậy đâu bác ơi. Như bác anhtuan nói là đúng đấy ạ, danh mục mặt hàng nó có hàng nghìn, hơn nữa lại không cố định nên không dùng hàm vlookup được.
Ý em muốn là từ 3(hay nhiều ) sheet lọc ra một danh sách rồi lấy tổng số lượng chứ danh sách không cố định và có sẵn.

Em nói thêm là yêu cầu này phát sinh do 2 vấn đề :

1. Các mặt hàng phát sinh mới liên tục
2. Lỗi typo.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Tôi góp ý Tunguyen nhé:
1/ Phải lập dm trước khi nhập SL phát sinh
2/ Còn chưa thì phải có công đoạn copy tòan bộ mã hàng vào 1 dm sau đó dùng advance filter, Unique record only => tạo ra danh mục. Hơi phê
3/ Dùng sumif là OK.
 
Cái này dùng công thức cũng ko phải là ko thể... nhưng nếu dử liệu nhiều quá thì e rằng file sẽ "nặng"... các cao thủ góp ý việc dùng VBA trong trường hợp này như thế nào đây?
 
ThuNghi đã viết:
Tôi góp ý Tunguyen nhé:
1/ Phải lập dm trước khi nhập SL phát sinh
2/ Còn chưa thì phải có công đoạn copy tòan bộ mã hàng vào 1 dm sau đó dùng advance filter, Unique record only => tạo ra danh mục. Hơi phê
3/ Dùng sumif là OK.
Đúng là dùng phương pháp này là được, lập lại danh mục rồi dùng lookup chứ nhỉ. Nhưng mà danh mục này có gần 3000 mục, ngày xưa em không biết dùng sumproduct nên để tính được tổng tiền thì file nặng 80MB+-+-+-+, giờ nhờ học ở GPE nên file chỉ còn 5MB./-*+/
Dung công thức thì hơi thủ công quá, mỗi lần lập danh mục mất thời gian lắm, có bác nào dùng VBA giúp em với.

Không có ai giúp em à.@!##
 
Chỉnh sửa lần cuối bởi điều hành viên:
Copy tòan bộ mã hàng các sh vào 1 sh nào đó, sau đó dùng advance filter, chọn unique record only. Hay là nghiên cứu bài ttphong2007 (13/10/07) dùng công thức mảng.
 
Cấu trúc các bảng của bạn là cố định?
i.e :
  1. cột tên hàng có value là "Ten Hang", dưới nó bắt đầu là list?
  2. cột số lượng nằm ngay bên cạnh cột tên hàng?
  3. mỗi list ở một sheet?
 
SoiBien đã viết:
Cấu trúc các bảng của bạn là cố định?
i.e :
  1. cột tên hàng có value là "Ten Hang", dưới nó bắt đầu là list?
  2. cột số lượng nằm ngay bên cạnh cột tên hàng?
  3. mỗi list ở một sheet?

Vâng, có thể để cố định thế được, trong file ví dụ em để cột tên hàng bắt đầu ở các ô khác nhau, nhưng để đơn giản có thể để bắt đầu từ cùng 1 ô.
 
Tunguyen đã viết:
Vâng, có thể để cố định thế được, trong file ví dụ em để cột tên hàng bắt đầu ở các ô khác nhau, nhưng để đơn giản có thể để bắt đầu từ cùng 1 ô.

Vậy để mình viết cho bạn một cái Macro, hix, lười quá không muốn thao tác bằng tay chứ gì/
 
Làm cho bạn file lấy DM = ct mà phê quá nên không tiếp tục. Để SoiBien làm VBA thôi.
 

File đính kèm

SoiBien đã viết:
Vậy để mình viết cho bạn một cái Macro, hix, lười quá không muốn thao tác bằng tay chứ gì/
Hì, vấn đề không phải là luời quá không muốn thao tác bằng tay, mà vì bây giờ vẫn làm bằng tay nhưng mà mất nhiều thời gian lắm mà lại hay bị nhầm.
Tạm thời em dùng cách của anh thunghi, hì, em cũng bái phục anh thunghi, xưa em cứ nghĩ mình xài công thức excel giỏi lắm, giờ mới thấy biển học đúng là vô bờ.+-+-+-+
 
To: Tunguyen
Lâu lắm rồi mới nghe được lời khen chân tình. Vui vì bạn chịu khó xem file, bản thân tôi cũng không muốn xem lại.
Tặng bạn file làm bằng VBA. Trong đây chỉ sd 6 name (lỡ đặt TenHang1,...,SL1) còn bao nhiêu name khác bạn xóa đi nếu không dùng công thức. Để nghiên cứu cũng vui.
File này cũng dễ hiểu lắm, vì tôi chưa biết cách làm cho khó hiểu.
 

File đính kèm

Cảm ơn anh nhiều, em đang xem file của anh, dễ hiểu nhưng mà khó lập, hì, em không tự viết được thế này, nhưng mà từ file của anh em áp dụng được nhiều việc khác đây, cảm ơn anh nhiều nha.

Có một lỗi là nếu sheet data mà không có dữ liệu sẽ báo lỗi tại dòng :

iR* = Data0*.Range("TenHang*").Rows.Count

Fix nó thế nào hả bác.

Với cả bây giờ mà em muốn add thêm các sheet data thì phải add thủ công trong VBA, anh giúp cho em chọn các sheet nào mình muốn đưa vào một cách tự đông được không ?
 
Chỉnh sửa lần cuối bởi điều hành viên:
Bạn nghiên cứu file sau. Hy vọng giúp được bạn chuyện khác.
Chúc thành công.
 

File đính kèm

Cảm ơn bác Soibien và bác Thunghi nhiều, em đang nghiền ngẫm 2 file của các bác, các bác cho em hậu tạ nhé. :)

Có một vấn đề, khi em dùng file của bác Soibien, tongMH sẽ cố định bằng 37.

Mã:
 'filter for unique record

        Range(Cells(1, 1), Selection.End(xlDown)).AdvancedFilter Action:=xlFilterInPlace, Unique:=True
        Range(Cells(1, 1), Selection.End(xlDown)).Select
        Selection.SpecialCells(xlCellTypeVisible).Select

        tongMH = Selection.Rows.Count - 1
     
        Selection.Copy Worksheets(shTongKet).Cells.Find(listTitle)
        .Sheets(shTongKet).Activate
        Application.DisplayAlerts = False
        .Sheets("tmpTongKet").Delete
        Application.DisplayAlerts = True
 
Chỉnh sửa lần cuối bởi điều hành viên:
Ngộ nhỉ, để mình xem lại nhé. Lúc viết thì không test trên nhiều loại.

Tunguyen đã viết:
Có một vấn đề, khi em dùng file của bác Soibien, tongMH sẽ cố định bằng 37.

Mã:
 'filter for unique record
 
        Range(Cells(1, 1), Selection.End(xlDown)).AdvancedFilter Action:=xlFilterInPlace, Unique:=True
        Range(Cells(1, 1), Selection.End(xlDown)).Select
        Selection.SpecialCells(xlCellTypeVisible).Select
 
        tongMH = Selection.Rows.Count - 1
 
        Selection.Copy Worksheets(shTongKet).Cells.Find(listTitle)
        .Sheets(shTongKet).Activate
        Application.DisplayAlerts = False
        .Sheets("tmpTongKet").Delete
        Application.DisplayAlerts = True
Bạn thay đoạn code trên bằng đoạn này nhé.

Mã:
        [COLOR=green]'filter for unique record[/COLOR]
        Range(Cells(1, 1), Selection.End(xlDown)).AdvancedFilter Action:=xlFilterCopy, CopyToRange _
        :=Cells(1, 2), Unique:=[COLOR=darkblue]True[/COLOR]
        Cells(1, 2).Select
        Range(ActiveCell, Selection.End(xlDown)).Select
        tongMH = Selection.Rows.Count - 1
        Selection.Copy Worksheets(shTongKet).Cells.Find(listTitle)
        .Sheets(shTongKet).Activate
        Application.DisplayAlerts = [COLOR=darkblue]False[/COLOR]
        .Sheets("tmpTongKet").Delete
        Application.DisplayAlerts = [COLOR=darkblue]True[/COLOR]
 
Chỉnh sửa lần cuối bởi điều hành viên:
File này bao gồm phần chỉnh sửa cho lỗi ở trên và ở file trước mình điền thẳng value sau khi lookup, điều này làm cho excel chạy rất chậm trong trường hợp có nhiều loại hàng. File này mình dùng cách điền công thức vào rồi filldown công thức xuống.
 

File đính kèm

Web KT

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

Back
Top Bottom