Cần hỗ trợ code VBA để tính Sumifs

Liên hệ QC

newstar611

Thành viên chính thức
Tham gia
7/11/12
Bài viết
69
Được thích
3
Xin chào!

Nhờ mọi người viết dùm mình code VBA để tính giống sumifs.

Xin cám ơn.
 

File đính kèm

Tại sao phải dùng SUMPRODUCT trước SUMIFS và tại sao phải dùng VBA thay cho SUMIFS?
 
Upvote 0
Bố trí dữ liệu một cách khéo léo mới là quan trọng. Thay vì gom chung một cục tên sản phẩm thì tại sao không tách ra từng cột để dễ dàng xử lý
Thay vì:

Sản phẩm A-1

Sản phẩm A-2

Sản phẩm A-3

Sản phẩm B-1

Sản phẩm B-2

Sản phẩm B-3

Sản phẩm C-1

Sản phẩm C-2

Sản phẩm C-3


Sao không là:


Tên Sản phẩm

Nhóm Sản Phẩm

A

1

A

2

A

3

B

1

B

2

B

3

C

1

C

2

C

3
 
Upvote 0
Bố trí dữ liệu một cách khéo léo mới là quan trọng. Thay vì gom chung một cục tên sản phẩm thì tại sao không tách ra từng cột để dễ dàng xử lý
Thay vì:

Sản phẩm A-1

Sản phẩm A-2

Sản phẩm A-3

Sản phẩm B-1

Sản phẩm B-2

Sản phẩm B-3

Sản phẩm C-1

Sản phẩm C-2

Sản phẩm C-3

Sao không là:

Tên Sản phẩm

Nhóm Sản Phẩm

A

1

A

2

A

3

B

1

B

2

B

3

C

1

C

2

C

3

Do em đang làm, dữ liệu từ nguồn khác nên không thể thay đổi được, em chỉ lấy làm ví vụ để học hỏi thêm
 
Upvote 0
Do em đang làm, dữ liệu từ nguồn khác nên không thể thay đổi được, em chỉ lấy làm ví vụ để học hỏi thêm
Bạn xem tham khảo nhé.
Mã:
Sub tinhtong()
     Dim arr, i As Long, dic As Object, arr1, dk As String, T, b As Long
     Set dic = CreateObject("scripting.dictionary")
     Range("B15:C20").ClearContents
     arr = Range("A15:C20").Value
     arr1 = Range("a3:C11").Value
     For i = 1 To UBound(arr, 1)
         dk = Split(arr(i, 1), " ")(1)
         dic.Item(dk) = i
     Next i
     For i = 1 To UBound(arr1, 1)
         dk = Split(arr1(i, 1), " ")(2)
         For Each T In Split(dk, "-")
             b = dic.Item(T)
             If b Then
                arr(b, 2) = arr1(i, 2) + arr(b, 2)
                arr(b, 3) = arr1(i, 3) + arr(b, 3)
             End If
        Next
    Next i
    Range("A15:C20").Value = arr
End Sub
 
Upvote 0
Nếu chỉ muốn để học hỏi thêm thì chịu khó một chút, viết thử code đi rồi nhờ người ta chỉnh cho chỗ sai.
Em không biết bắt đầu từ đâu nên mới đưa file trắng không có code, chứ bình thường em đều có code kèm (tuy không đúng).
Bài đã được tự động gộp:

Bạn xem tham khảo nhé.
Mã:
Sub tinhtong()
     Dim arr, i As Long, dic As Object, arr1, dk As String, T, b As Long
     Set dic = CreateObject("scripting.dictionary")
     Range("B15:C20").ClearContents
     arr = Range("A15:C20").Value
     arr1 = Range("a3:C11").Value
     For i = 1 To UBound(arr, 1)
         dk = Split(arr(i, 1), " ")(1)
         dic.Item(dk) = i
     Next i
     For i = 1 To UBound(arr1, 1)
         dk = Split(arr1(i, 1), " ")(2)
         For Each T In Split(dk, "-")
             b = dic.Item(T)
             If b Then
                arr(b, 2) = arr1(i, 2) + arr(b, 2)
                arr(b, 3) = arr1(i, 3) + arr(b, 3)
             End If
        Next
    Next i
    Range("A15:C20").Value = arr
End Sub
Cám ơn snow25 nhiều.
Riêng phần tính "Sản phẩm AB" không áp dụng được code này, có cách nào viết riêng cho phần này không snow25?
 
Lần chỉnh sửa cuối:
Upvote 0
Em không biết bắt đầu từ đâu nên mới đưa file trắng không có code, chứ bình thường em đều có code kèm (tuy không đúng).
Bài đã được tự động gộp:


Cám ơn snow25 nhiều.
Riêng phần tính "Sản phẩm AB" không áp dụng được code này, có cách nào viết riêng cho phần này không snow25?
Vì AB bạn hiểu nó là 2 sản phẩm nhưng mà AB liền nhau không biết phân biệt kiểu gì.
 
Upvote 0
Web KT

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

Back
Top Bottom