Dictionary thay hàm sumproduct/sumif (1 người xem)

Liên hệ QC

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

vinhlong

Thành viên mới
Tham gia
16/5/08
Bài viết
16
Được thích
0
Kính gửi mấy anh chị
Tôi đang làm báo cáo tổng hợp mà dữ liệu hiện tại lên tới >100.000 dòng, nếu dùng hàm sumif hoặc sumproduct thì chạy xong tôi đã uống được 3 ly cafe và hút xong 1 gói thuốc. Kính mong mấy anh chị hỗ trợ giúp tôi theo file đính kèm. Tôi chân thành cảm ơn.

Trân trọng./.
 

File đính kèm

Kính gửi mấy anh chị
Tôi đang làm báo cáo tổng hợp mà dữ liệu hiện tại lên tới >100.000 dòng, nếu dùng hàm sumif hoặc sumproduct thì chạy xong tôi đã uống được 3 ly cafe và hút xong 1 gói thuốc. Kính mong mấy anh chị hỗ trợ giúp tôi theo file đính kèm. Tôi chân thành cảm ơn.

Trân trọng./.


* Có vẻ như bác bill gate đã lường trước vấn đề này rồi nên bác đã bổ sung vào phần Data mục --> consolidate
* Nếu dung dictionary có thể dung code của bạn hpkhuong

tuy nhiên theo tôi nên bổ sung thêm dòng lệnh :
if len(tmp) then ...........
 
Lần chỉnh sửa cuối:
Upvote 0
Rất cám ơn bạn hpkhuong
Cho tôi làm phiền thêm là:
- Cột số thứ tự và Tên sản phẩm tôi tự đặt, ko cần auto, chỉ cần auto từ cột tiêu đề 1 tới 7 thôi--> tức chỉ tính tổng
Rất mong nhận được sự trợ giúp của bạn
Trân trọng./.
 
Upvote 0
Rất cám ơn bạn hpkhuong
Cho tôi làm phiền thêm là:
- Cột số thứ tự và Tên sản phẩm tôi tự đặt, ko cần auto, chỉ cần auto từ cột tiêu đề 1 tới 7 thôi--> tức chỉ tính tổng
Rất mong nhận được sự trợ giúp của bạn
Trân trọng./.

Chạy thử code này xem sao
PHP:
Public Sub GPE()
Dim Dic As Object, sArr(), dArr(), I As Long, J As Long, K As Long, Rws As Long, Tem As String
Set Dic = CreateObject("Scripting.Dictionary")
sArr = Sheets("Report").Range("C5", Sheets("Report").Range("C5").End(xlDown)).Value
ReDim dArr(1 To UBound(sArr, 1), 1 To 7)
For I = 2 To UBound(sArr)
    K = K + 1
    Dic.Item(sArr(I, 1)) = K
Next I
sArr = Sheets("Data").Range("C5", Sheets("Data").Range("C5").End(xlDown)).Resize(, 8).Value
For I = 2 To UBound(sArr)
    Tem = sArr(I, 1)
    If Dic.Exists(Tem) Then
        Rws = Dic.Item(Tem)
        For J = 2 To 8
            dArr(Rws, J - 1) = dArr(Rws, J - 1) + sArr(I, J)
        Next J
    End If
Next I
Sheets("Report").Range("D6").Resize(K, 7) = dArr
Set Dic = Nothing
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom