Code tổng hợp số lượng theo mã hàng

Liên hệ QC

huyen891977

Thành viên chính thức
Tham gia
15/11/08
Bài viết
87
Được thích
16
Nghề nghiệp
nojob
Chào các bạn! Mình có vấn đề này nhờ các bạn giúp nhé. Mình dùng code để tổng hợp số lượng của các mặt hàng theo mã hàng từ sheet NHAP sang sheet TN, mình đặt thêm công thức ở các cột tiếp theo của bảng tổng hợp nhập thì khi mình nhấp nút lệnh để tổng hợp số lượng các mặt hàng nhập thì các công thức ở các cột mới thêm vào bị xóa hết. Các bạn xem file và giúp giùm nhé. Thân chào!
(Sẵn tiện các bạn xem code có bị lỗi gì không nhé, mình chỉ sưu tầm rồi áp dụng, chẳng biết viết gì cả)
 
Lần chỉnh sửa cuối:
Chào các bạn! Mình có vấn đề này nhờ các bạn giúp nhé. Mình dùng code để tổng hợp số lượng của các mặt hàng theo mã hàng từ sheet NHAP sang sheet TN, mình đặt thêm công thức ở các cột tiếp theo của bảng tổng hợp nhập thì khi mình nhấp nút lệnh để tổng hợp số lượng các mặt hàng nhập thì các công thức ở các cột mới thêm vào bị xóa hết. Các bạn xem file và giúp giùm nhé. Thân chào!
(Sẵn tiện các bạn xem code có bị lỗi gì không nhé, mình chỉ sưu tầm rồi áp dụng, chẳng biết viết gì cả)
Đương nhiên công thức sẽ mất, lý do nằm ở:
Sheet6.[a1].CurrentRegion.Offset(1).ClearContents
Nó sẽ clear tất tần tật dử liệu đang "dính liền" nhau tính từ cell A1
Vậy nếu bạn muốn dùng công thức "thêm" thì có 2 cách:
1> Không dùng CurrentRegion
2> Các công thức nằm cách vùng tổng hợp ít nhất 1 cột
Có điều tôi đang thắc mắc:
- Bạn đã dùng VBA sao lại phải thêm công thức?
- Công thức của bạn là gì? Có thể diển giãi chi tiết để mọi người chuyển nó sang VBA luôn giúp bạn?
Ngoài ra tôi thấy code của bạn hơi dài, tôi nghĩ tôi có thể làm cho nó ngắn đi đấy
Ví dụ, với cái code dài lòng thòng của bạn thì tôi chỉ cần như thế này là đủ:
PHP:
Sub TongHop()
  With ThisWorkbook
    PathName = "'" & .Path & "\[" & .Name & "]NHAP'!"
  End With
  With Sheet5.Range("A1").CurrentRegion
    Range("A2").Consolidate PathName & .Offset(1).Resize(, 4).Address(, , 2), 9, , 1
    .Resize(, 1).AdvancedFilter 1, , , True
    .Offset(1, 1).Resize(, 2).Copy
  End With
  Range("B2").PasteSpecial 3
  Sheet5.ShowAllData
End Sub
Không có For phiếc gì ráo
 

File đính kèm

Upvote 0
Mình cần công thức vì khi mình tổng hợp là tổng hợp tổng số lượng nhập của từng mặt hàng ở sheet NHAP, mình thêm công thức ở cột E và F để tính tổng số lượng xuất và tồn.
Công thức ở cột E :
E2 = IF($A2="","",SUMIF(OFFSET(KH,,2,,),TN!$A2,OFFSET(KH,,4,,))) : tính tổng số lượng xuất ở sheet XUAT của từng mặt hàng
với name KH = OFFSET(XUAT!$C$2,,,COUNTA(XUAT!$C$2:$C$40000),)
Công thức ở cột F :
F2 = D2 - E2
Cho mình hỏi là : Có thể đưa luôn công thức ở 2 cột (E,F) vào code ? nếu thực hiện được mình lại làm phiền các cao thủ giúp nhé. Thân chào.

Cảm ơn bạn ndu96081631, bạn đúng là một trong các cao thủ VBA , mình đã vận dụng sự giúp đở của bạn vào file của mình và test rất OK. Mình cố gắng học hỏi ở các sư phụ trên GPE nhiều hơn. Chúc tất cả mọi người một ngày mới vui vẽ, năm mới hạnh phúc. Thân chào!
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Mình cần công thức vì khi mình tổng hợp là tổng hợp tổng số lượng nhập của từng mặt hàng ở sheet NHAP, mình thêm công thức ở cột E và F để tính tổng số lượng xuất và tồn.
Công thức ở cột E :
E2 = IF($A2="","",SUMIF(OFFSET(KH,,2,,),TN!$A2,OFFSET(KH,,4,,))) : tính tổng số lượng xuất ở sheet XUAT của từng mặt hàng
với name KH = OFFSET(XUAT!$C$2,,,COUNTA(XUAT!$C$2:$C$40000),)
Công thức ở cột F :
F2 = D2 - E2
Cho mình hỏi là : Có thể đưa luôn công thức ở 2 cột (E,F) vào code ? nếu thực hiện được mình lại làm phiền các cao thủ giúp nhé. Thân chào.
Tôi nghĩ việc đưa công thức vào code hoàn toàn không có vấn đề, nhưng vì:
- Trong file của bạn tôi chẳng thấy sheet nào là sheet XUAT, nên không biết cái name KH ấy mang ý nghĩa gì
- Nếu bạn muốn hoàn tất công thức này thì phải đưa 1 file khác lên, có cả sheet XUAT
Nói chung với code của tôi ở trên thì việc bạn nhập công thức từ code E trở đi sẽ không hề bị xóa khi tổng hợp (bạn thử xem)
Ngoài ra tôi xin cải tiến code trên 1 tí, bỏ luôn biến PathName (dùng Parent)
PHP:
Sub TongHop()
  Application.ScreenUpdating = False
  Sheet6.Range("A1").CurrentRegion.Offset(1).Resize(, 4).ClearContents
  With Sheet5.Range("A1").CurrentRegion
    Sheet6.Range("A2").Consolidate .Parent.Name & "!" & .Offset(1).Resize(, 4).Address(, , 2), 9, , 1
    .Resize(, 1).AdvancedFilter 1, , , True
    .Offset(1, 1).Resize(, 2).Copy
  End With
  Sheet6.Range("B2").PasteSpecial 3
  Sheet5.ShowAllData: Sheet6.Range("A1").Select
  Application.ScreenUpdating = True
End Sub

Cảm ơn bạn ndu96081631, bạn đúng là cao thủ VBA, mình đã vận dụng sự giúp đở của bạn vào file của mình và test rất OK. Mình cố gắng học hỏi ở bạn nhiều hơn. Chúc ngày mới vui vẽ, năm mới hạnh phúc tất cả mọi người.
Thân chào!
Ái da... Xin đính chính lại:
- Tôi không phải là cao thủ gì cả như bạn đã nói (chẳng qua là "ráng" với khả năng có thể)
- Toàn bộ kiến thức trong code đều học được từ các cao thủ trên diển đàn (mà giờ kể tên ra chắc phải cả trang giấy) ---> Như thầy Phan Tự Hướng, Sư phụ SA_DQ, Sư phụ pmt0412, Hai2hai, ca_dafi, hoangvuluan, rollover79, Mr Okebab, Đào Việt Cường, TuanVNUNI, BinhOverAC, hoangdanh282vn, boyxin... Ôi trời... vân vân và vân vân... luôn ---> Hay nói đúng hơn là: "Các cao thủ trên diển đàn đều xứng đáng là sư phụ tôi"
(Biết là Spam, nhưng vẫn phải nói... vì.. ngại quá)
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Web KT

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

Back
Top Bottom