Xin giúp mã VBA tính tổng nhiều điều kiện.

Liên hệ QC

mrbomst

Thành viên mới
Tham gia
20/11/19
Bài viết
49
Được thích
1
Em xin chào mọi người ạ!
Nhờ mọi người giúp em 1 chút về mã vba tính tổng theo điều kiện cho bảng tính, dữ liệu như hình sau ạ!
Điều kiện nêu ra là tính tổng theo điều kiện mã hàng và mã loại cho tất cả số lượng phát sinh trong kỳ. kết quả trả về ở cột I. trong hình là em đã demo kết quả sau khi tính toán xong.
mong được mọi người giúp đỡ.
em xin cảm ơn ạ!
1607496010874.png
 

File đính kèm

  • Book1.xlsm
    8.6 KB · Đọc: 17
=sumifs(vùng_cột_C, mã hàng, vùng_cột_F, mã loại, vùng_cột_G)
 
Upvote 0
=sumifs(vùng_cột_C, mã hàng, vùng_cột_F, mã loại, vùng_cột_G)
Dữ liệu của em lớn nên dùng sumif sẽ làm chậm quá trình tính toán. mong được mọi người giúp theo hướng vòng lặp hoặc sử dụng dictionary. chứ dùng hàm hay pivottable thì em cũng tự thiết lập được ạ!
 
Upvote 0
Em xin chào mọi người ạ!
Nhờ mọi người giúp em 1 chút về mã vba tính tổng theo điều kiện cho bảng tính, dữ liệu như hình sau ạ!
Điều kiện nêu ra là tính tổng theo điều kiện mã hàng và mã loại cho tất cả số lượng phát sinh trong kỳ. kết quả trả về ở cột I. trong hình là em đã demo kết quả sau khi tính toán xong.
mong được mọi người giúp đỡ.
em xin cảm ơn ạ!
View attachment 250897
Dùng hàm sumifs nó ra như sau:

1607496657947.png
 
Upvote 0
Upvote 0
Pivot Table đi bạn ơi.
Lọc loại trùng, tính tổng, lèo cái xong.
Như bài #3 em cũng đã đưa ra lý do là do đây là dữ liệu nhỏ trong dữ liệu tính toán, chưa phải là báo cáo cuối cùng nên em xin phép được mọi người hướng dẫn em ở góc độ sử dụng mã code để tính toán ạ!
 
Upvote 0
Pivot Table đi bạn ơi.
Lọc loại trùng, tính tổng, lèo cái xong.
"Dữ liệu lớn" mà Pivot Table cái gì.
Data Model và Power Pivot mới chịu nổi.

Vả lại, người ta đã muốn VBA thì bất cứ đề nghị nào khác cũng như đàn gảy tai trâu.
 
Upvote 0
Upvote 0
Vậy tiếp tục dùng nó nhé bạn. Để phân tích dữ liệu, Pivotable, PowerPivot là vô địch.
Cái này chưa phải là báo cáo và phân tích dữ liệu. đây là dữ liệu tính trung gian trong bảng dữ liệu. và căn cứ vào đấy để tính toán lên các báo cáo khác. có thể các bác đang hiểu sử dụng dữ liệu này để lên báo cáo nhưng đây chưa phải là dữ liệu cuối ạ!
 
Upvote 0
Cái này chưa phải là báo cáo và phân tích dữ liệu. đây là dữ liệu tính trung gian trong bảng dữ liệu. và căn cứ vào đấy để tính toán lên các báo cáo khác. có thể các bác đang hiểu sử dụng dữ liệu này để lên báo cáo nhưng đây chưa phải là dữ liệu cuối ạ!
Thì ta dùng Power Pivot để ra kết quả, sau đó tính toán. Mà Power Pivot cũng tính toán để ra báo cáo cuối cùng luôn đó bạn.
 
Upvote 0
Vậy bạn làm như vầy:
- Đưa dữ liệu thô ban đầu của ban đầu lên đây;
- Đưa đáp án cuối cùng của báo cáo cuối cùng mong muốn lên đây.
Để giải quyết một lượt luôn.
Để xem 2 ảnh trên kia dùng Power Pivot dzư lào. :p
 
Upvote 0
Vậy bạn làm như vầy:
- Đưa dữ liệu thô ban đầu của ban đầu lên đây;
- Đưa đáp án cuối cùng của báo cáo cuối cùng mong muốn lên đây.
Để giải quyết một lượt luôn.
Để xem 2 ảnh trên kia dùng Power Pivot dzư lào. :p
Còn ảnh này nữa chứ :D Có thể chủ thớt hỏng thích dùng cái sẵn có mà thích dùng VBA hơn.
 
Upvote 0
Em xin chào mọi người ạ!
Nhờ mọi người giúp em 1 chút về mã vba tính tổng theo điều kiện cho bảng tính, dữ liệu như hình sau ạ!
Điều kiện nêu ra là tính tổng theo điều kiện mã hàng và mã loại cho tất cả số lượng phát sinh trong kỳ. kết quả trả về ở cột I. trong hình là em đã demo kết quả sau khi tính toán xong.
mong được mọi người giúp đỡ.
em xin cảm ơn ạ!
View attachment 250897
Bạn thử.
Mã:
Sub tinhtong()
   Dim i As Long, dic As Object, arr, kq, dk As String
   Set dic = CreateObject("Scripting.dictionary")
   With Sheets("sheet1")
        arr = .Range("C4:G16").Value
        ReDim kq(1 To UBound(arr), 1 To 1)
        For i = 1 To UBound(arr)
            dk = arr(i, 1) & "#" & arr(i, 4)
            If Not dic.exists(dk) Then
               dic.Add dk, arr(i, 5)
            Else
               dic.Item(dk) = dic.Item(dk) + arr(i, 5)
            End If
        Next i
        For i = 1 To UBound(arr)
             dk = arr(i, 1) & "#" & arr(i, 4)
             kq(i, 1) = dic.Item(dk)
        Next i
        .Range("J4:J16").Value = kq
    End With
    Set dic = Nothing
End Sub
 
Upvote 0
Còn ảnh này nữa chứ :D Có thể chủ thớt hỏng thích dùng cái sẵn có mà thích dùng VBA hơn.
Dạ đây là 1 phần của dữ liệu thô ban đầu. mục đích chủ yếu là để khi nhập liệu nắm được số lượng còn lại của các mã hàng. và một phần để lên báo cáo sau ạ
1607499047385.png
Bài đã được tự động gộp:

Bạn thử.
Mã:
Sub tinhtong()
   Dim i As Long, dic As Object, arr, kq, dk As String
   Set dic = CreateObject("Scripting.dictionary")
   With Sheets("sheet1")
        arr = .Range("C4:G16").Value
        ReDim kq(1 To UBound(arr), 1 To 1)
        For i = 1 To UBound(arr)
            dk = arr(i, 1) & "#" & arr(i, 4)
            If Not dic.exists(dk) Then
               dic.Add dk, arr(i, 5)
            Else
               dic.Item(dk) = dic.Item(dk) + arr(i, 5)
            End If
        Next i
        For i = 1 To UBound(arr)
             dk = arr(i, 1) & "#" & arr(i, 4)
             kq(i, 1) = dic.Item(dk)
        Next i
        .Range("J4:J16").Value = kq
    End With
    Set dic = Nothing
End Sub
Em xin cảm ơn ạ. mã chạy ổn rồi ạ!
 
Upvote 0
Bạn thử.
Mã:
Sub tinhtong()
   Dim i As Long, dic As Object, arr, kq, dk As String
   Set dic = CreateObject("Scripting.dictionary")
   With Sheets("sheet1")
        arr = .Range("C4:G16").Value
        ReDim kq(1 To UBound(arr), 1 To 1)
        For i = 1 To UBound(arr)
            dk = arr(i, 1) & "#" & arr(i, 4)
            If Not dic.exists(dk) Then
               dic.Add dk, arr(i, 5)
            Else
               dic.Item(dk) = dic.Item(dk) + arr(i, 5)
            End If
        Next i
        For i = 1 To UBound(arr)
             dk = arr(i, 1) & "#" & arr(i, 4)
             kq(i, 1) = dic.Item(dk)
        Next i
        .Range("J4:J16").Value = kq
    End With
    Set dic = Nothing
End Sub
Kính gửi Bác Snow25. nếu như dữ liệu vẫn vậy mà điều kiện thứ 2 chuyển thành hàng ngang như hình sau thì mã này có thể được sửa lại như nào bác nhỉ. nhờ bác hướng dẫn em với ạ!
1607594245038.png
 
Upvote 0
Web KT

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

Back
Top Bottom