Hỏi về code để tính sumif từ nhiều sheet

Liên hệ QC

NguyenMinh_DN

Thành viên mới
Tham gia
30/6/20
Bài viết
5
Được thích
1
Mình có file dữ liệu vd như đính kèm.
Nhờ các bạn viết giùm code để tính tổng số lượng các mặt hàng tại sheet TONGHOP theo số lượng ở từng sheet riêng biệt. (Số dòng sản phẩm ở từng sheet sẽ tăng dần theo thời gian chứ không cố định).
Mong các bạn hỗ trợ! Cảm ơn mọi người!
 

File đính kèm

  • VD_thongke.xlsm
    14 KB · Đọc: 22
C:
Sub Sumif()
Dim iWs As Worksheet
Dim TargetWS As Worksheet: Set TargetWS = ThisWorkbook.Sheets("TONGHOP")
Dim MyDic As Object: Set MyDic = CreateObject("Scripting.Dictionary")
Dim Ar(), ArKQ(), ArrDataSheet()
Dim Pos, i&, o&
With TargetWS
  .Range("D2:D100000") = ""
    Ar = .Range("B2:D" & .[B1048576].End(3).Row).Value
      ReDim ArKQ(1 To UBound(Ar, 1), 1 To 1)
        For i = 1 To UBound(Ar, 1)
           Pos = Ar(i, 1)
            If Pos <> "" Then
                If Not MyDic.exists(Pos) Then
                  o = o + 1
                    MyDic.Add Pos, o
                End If
            End If
        Next
    End With
 
For Each iWs In ThisWorkbook.Sheets
  If iWs.Name <> TargetWS.Name Then
      With iWs
        ArrDataSheet = .Range("B2:D" & .[B1048576].End(3).Row).Value
          For i = 1 To UBound(ArrDataSheet, 1)
            If MyDic.exists(ArrDataSheet(i, 1)) Then
              Ar(MyDic.Item(ArrDataSheet(i, 1)), 3) = Ar(MyDic.Item(ArrDataSheet(i, 1)), 3) + ArrDataSheet(i, 3)
            End If
          Next
      End With
  End If
Next

For i = 1 To UBound(Ar, 1)
    ArKQ(i, 1) = Ar(i, 3)
Next
  TargetWS.[D2].Resize(UBound(ArKQ, 1), 1) = ArKQ
Set MyDic = Nothing
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Mình có file dữ liệu vd như đính kèm.
Nhờ các bạn viết giùm code để tính tổng số lượng các mặt hàng tại sheet TONGHOP theo số lượng ở từng sheet riêng biệt. (Số dòng sản phẩm ở từng sheet sẽ tăng dần theo thời gian chứ không cố định).
Mong các bạn hỗ trợ! Cảm ơn mọi người!
Yêu cầu chưa rõ ràng, tính tổng số lượng theo "Tên SP" , hay vừa Tên SP vừa Người bán?
File này là thống kê theo Tên SP và Người bán. Nếu có 100 SP và 10 người bán thì số dòng Kết quả tối đa là 1.000 dòng.
Nếu nhiều hơn nữa thì bạn tự chỉnh code nhé.
 

File đính kèm

  • TongHop.xlsb
    26 KB · Đọc: 12
Upvote 0
Yêu cầu chưa rõ ràng, tính tổng số lượng theo "Tên SP" , hay vừa Tên SP vừa Người bán?
File này là thống kê theo Tên SP và Người bán. Nếu có 100 SP và 10 người bán thì số dòng Kết quả tối đa là 1.000 dòng.
Nếu nhiều hơn nữa thì bạn tự chỉnh code nhé.
1. Diễn tả yêu cầu cho rõ ràng sẽ tốn công sức người hỏi.
2. Tự đoán lấy những chỗ thiếu sót của yêu cầu sẽ tốn công sức người trả lời.
Đương nhiên, nếu bạn chấp nhận 2 thì người hỏi sẽ luôn luôn chọn 1.
 
Upvote 0
Yêu cầu chưa rõ ràng, tính tổng số lượng theo "Tên SP" , hay vừa Tên SP vừa Người bán?
File này là thống kê theo Tên SP và Người bán. Nếu có 100 SP và 10 người bán thì số dòng Kết quả tối đa là 1.000 dòng.
Nếu nhiều hơn nữa thì bạn tự chỉnh code nhé.
Dạ. Em chỉ muốn nó thống kê theo tên sản phẩm thôi.
Mà cho em hỏi là làm sao để nó tự động lọc danh mục sản phẩm và tính tổng từ các sheet mà không bấm vô cái hình được không?
Bài đã được tự động gộp:

C:
Sub Sumif()
Dim iWs As Worksheet
Dim TargetWS As Worksheet: Set TargetWS = ThisWorkbook.Sheets("TONGHOP")
Dim MyDic As Object: Set MyDic = CreateObject("Scripting.Dictionary")
Dim Ar(), ArKQ(), ArrDataSheet()
Dim Pos, i&, o&
With TargetWS
  .Range("D2:D100000") = ""
    Ar = .Range("B2:D" & .[B1048576].End(3).Row).Value
      ReDim ArKQ(1 To UBound(Ar, 1), 1 To 1)
        For i = 1 To UBound(Ar, 1)
           Pos = Ar(i, 1)
            If Pos <> "" Then
                If Not MyDic.exists(Pos) Then
                  o = o + 1
                    MyDic.Add Pos, o
                End If
            End If
        Next
    End With

For Each iWs In ThisWorkbook.Sheets
  If iWs.Name <> TargetWS.Name Then
      With iWs
        ArrDataSheet = .Range("B2:D" & .[B1048576].End(3).Row).Value
          For i = 1 To UBound(ArrDataSheet, 1)
            If MyDic.exists(ArrDataSheet(i, 1)) Then
              Ar(MyDic.Item(ArrDataSheet(i, 1)), 3) = Ar(MyDic.Item(ArrDataSheet(i, 1)), 3) + ArrDataSheet(i, 3)
            End If
          Next
      End With
  End If
Next

For i = 1 To UBound(Ar, 1)
    ArKQ(i, 1) = Ar(i, 3)
Next
  TargetWS.[D2].Resize(UBound(ArKQ, 1), 1) = ArKQ
Set MyDic = Nothing
End Sub
Cảm ơn bạn đã giúp đỡ. Mình bỏ code vào chạy thì nó không ra kết quả. Chỉ được cái hình như hình dưới thôi là vì sao nhỉ?
1593611465401.png
Bài đã được tự động gộp:

1. Diễn tả yêu cầu cho rõ ràng sẽ tốn công sức người hỏi.
2. Tự đoán lấy những chỗ thiếu sót của yêu cầu sẽ tốn công sức người trả lời.
Đương nhiên, nếu bạn chấp nhận 2 thì người hỏi sẽ luôn luôn chọn 1.
Em hiểu như thế nào thì em nhờ mọi người như vậy. Chứ không phải là em không diễn tả rõ ràng. Bác làm em buồn quá. Mà thôi. Nhờ bác em cũng có được tý kinh nghiệm. Cảm ơn bác vậy!
 
Lần chỉnh sửa cuối:
Upvote 0
...Em hiểu như thế nào thì em nhờ mọi người như vậy. Chứ không phải là em không diễn tả rõ ràng. Bác làm em buồn quá. Mà thôi. Nhờ bác em cũng có được tý kinh nghiệm. Cảm ơn bác vậy!
Có hai hạng người lên đây hỏi bài. Hạng chỉ muốn nhờ làm bài giùm và hạng thiếu kinh nghiệm cần học hỏi.
Cả hai hạng đều không nên và không thể buồn.
Người chỉ cốt ý nhờ làm giùm thì lấy cái gì để mà buồn người khác?
Người cốt ý học hỏi thì chớ nên để cho tình cảm ảnh hưởng đến lý trí của mình.

Thuốc đắng đả tật. Nếu bạn còn nói chuyện tình cảm vu vơ thì không bao giờ bạn hiểu được câu:
"Diễn tả được vấn đề một cách rành rọt, lô gic nghiêm chỉnh thì coi như đã giải được trên phân nửa"
 
Upvote 0
Có hai hạng người lên đây hỏi bài. Hạng chỉ muốn nhờ làm bài giùm và hạng thiếu kinh nghiệm cần học hỏi.
Cả hai hạng đều không nên và không thể buồn.
Người chỉ cốt ý nhờ làm giùm thì lấy cái gì để mà buồn người khác?
Người cốt ý học hỏi thì chớ nên để cho tình cảm ảnh hưởng đến lý trí của mình.

Thuốc đắng đả tật. Nếu bạn còn nói chuyện tình cảm vu vơ thì không bao giờ bạn hiểu được câu:
"Diễn tả được vấn đề một cách rành rọt, lô gic nghiêm chỉnh thì coi như đã giải được trên phân nửa"
Em cũng đâu thấy bác giúp vấn đề của em. Và em cũng thấy có 2 hạng người:
1) Là những người trả lời câu hỏi của người khác cần. Em rất cảm ơn.
2) Là người như bác. Không trả lời câu hỏi người ta cần mà còn có ý săm soi.
p/s: Thành ngữ "Thuốc đắng dã tật" ạ!
 
Upvote 0
pi-ét cái con khỉ.

1593614443507.png
(Tứ Thư Bình Giải, Lý Minhn Tuấn)

đã (tiếng Việt) là kiểu viết cũ của từ đả (Hán Việt): diệt trừ.

1593614703013.png
(sggp .org.vn)
 
Upvote 0
Dạ. Em chỉ muốn nó thống kê theo tên sản phẩm thôi.
Mà cho em hỏi là làm sao để nó tự động lọc danh mục sản phẩm và tính tổng từ các sheet mà không bấm vô cái hình được không?
Bài đã được tự động gộp:


Cảm ơn bạn đã giúp đỡ. Mình bỏ code vào chạy thì nó không ra kết quả. Chỉ được cái hình như hình dưới thôi là vì sao nhỉ?
View attachment 240265
Bài đã được tự động gộp:


Em hiểu như thế nào thì em nhờ mọi người như vậy. Chứ không phải là em không diễn tả rõ ràng. Bác làm em buồn quá. Mà thôi. Nhờ bác em cũng có được tý kinh nghiệm. Cảm ơn bác vậy!




1593615380710.png1593615408016.png

Bạn dùng hàm Sumif mà không có điều kiện liệu có ra kết quả không? VBA cũng vậy : Cột sản phẩm phải có dữ liệu nó mới có điều kiện mà tính chứ không nó đoán mò hả bạn?
 

File đính kèm

  • VD_thongke (1).xlsm
    25.3 KB · Đọc: 5
Upvote 0
View attachment 240271View attachment 240272

Bạn dùng hàm Sumif mà không có điều kiện liệu có ra kết quả không? VBA cũng vậy : Cột sản phẩm phải có dữ liệu nó mới có điều kiện mà tính chứ không nó đoán mò hả bạn?
Cảm ơn bạn.
Mà có cách nào để không phải bấm vô cái nút "Done" để nó tự chạy được không bạn? Kiểu như khi ta nhập thêm một thêm 01 sản phẩm thì nó tự update bên trang tính Tổng Hợp và nó cộng luôn cho mình ấy.
 
Upvote 0
Cảm ơn bạn.
Mà có cách nào để không phải bấm vô cái nút "Done" để nó tự chạy được không bạn? Kiểu như khi ta nhập thêm một thêm 01 sản phẩm thì nó tự update bên trang tính Tổng Hợp và nó cộng luôn cho mình ấy.


1593616430182.png
Hãy đảm bảo khi thêm tên sản phẩm phải không trùng với sản phẩm đã có. Tự động tính khi update rồi đó bạn
 

File đính kèm

  • VD_thongke (1).xlsm
    27.3 KB · Đọc: 10
Upvote 0
1/ Dạ. Em chỉ muốn nó thống kê theo tên sản phẩm thôi.
2/ Mà cho em hỏi là làm sao để nó tự động lọc danh mục sản phẩm và tính tổng từ các sheet mà không bấm vô cái hình được không?
1/ Thống kê theo tên SP thì có khi nào 1 SP ví dụ Chuột DELL, Người bán là Hưng, có ai khác bán SP này nữa không? Nếu có thì cột Người bán ghi kết quả thế nào?
2/ Cái hình là cho vui thôi, bạn thấy chướng mắt thì thiếu gì cách Update dữ liệu mà chẳng cần click chuột.
Em cũng đâu thấy bác giúp vấn đề của em. Và em cũng thấy có 2 hạng người:
1) Là những người trả lời câu hỏi của người khác cần. Em rất cảm ơn.
2) Là người như bác. Không trả lời câu hỏi người ta cần mà còn có ý săm soi.
p/s: Thành ngữ "Thuốc đắng dã tật" ạ!
"Bác ơi! Cháu đói quá, cứu cháu với".
Ở đời cũng có nhiều trường hợp:
1/ Cháu ăn đỡ nửa trái bắp này đi.
2/ Cháu vào nhà bác, hình như còn vài chén cơm canh ngon đó.
3/ Cháu ra sau hè, ruộng của bác lúa chín vàng đồng, cháu muốn cắt lấy bao nhiêu về nấu ăn tùy thích.
Suy ra, người không cho ăn tại chỗ mà gợi ý ra đồng cắt lúa về ăn, ai là người giúp lâu dài?
Chỉ những người không biết nấu ăn mới là người suy nghĩ nông cạn, thà là hiểu rõ ý tốt, nói thẳng "bác ơi cho con mượn lưỡi liềm cắt lúa".
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi thấy rằng những ai chỉ muốn ăn sẵn sẽ không biết cách tự giải quyết những khúc mắc trong vấn đề mình đặt ra và cuối cùng là mãi phụ thuộc vào người khác.
 
Upvote 0
Web KT

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

Back
Top Bottom