Giúp đỡ giải pháp thay hàm Sumif khi dữ liệu lớn. (1 người xem)

Liên hệ QC

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

phuyen89

Thành viên tích cực
Tham gia
20/11/08
Bài viết
875
Được thích
341
Nghề nghiệp
Student
Chào mọi người!
[FONT=&amp]Sở dĩ em nhờ mọi người viết code thay hàm Sumif vì số lượng dòng của em rất lớn.Một tháng khoảng 20.000 dòng.Trong VBA em sử dụng Application.worksheetfunction. Sumif nhưng khi dữ liệu rất lớn nó trở nên chạy rất ì ạch. Mong mọi người có giải pháp khắc phục cho em học hỏi.[/FONT]

[FONT=&amp]Yêu cầu như sau:[/FONT]

· [FONT=&amp]Cột C: Tính số tiền phải Phải Thu hộ có Vùng là C3:C20.000, điều kiện B4 tại sheet Data, Vùng cần tính Tổng là C3: C20.000[/FONT]

· [FONT=&amp]Cột D: Tính số tiền phải Thu phí có Vùng là D3:D20.000, điều kiện B4 tại sheet Data, Vùng cần tính Tổng là D3: D20.000[/FONT]
Mong mọi người giúp đỡ.
 

File đính kèm

Lần chỉnh sửa cuối:
Lấy file ở bài 1 nhé
Mã:
Sub Summary()
  Dim aSource, aDes, aItem(1 To 2) As Double, aSum(1 To 2) As Double
  Dim tmp As String
  Dim dic As Object
  Dim i As Long, d1 As Double, d2 As Double
  Set dic = CreateObject("Scripting.Dictionary")
  dic.CompareMode = vbTextCompare
  aSource = Sheets("ThuTien").Range("B3:D20000").Value
  aDes = Sheets("Data").Range("B4:D20000").Value
  For i = 1 To UBound(aSource)
    tmp = CStr(aSource(i, 1))
    If Len(tmp) Then
      If IsNumeric(tmp) Then tmp = "'" & tmp
      aItem(1) = aSource(i, 2)
      aItem(2) = aSource(i, 3)
      If Not dic.Exists(tmp) Then
        dic.Add tmp, aItem
      Else
        aSum(1) = dic.Item(tmp)(1) + aItem(1)
        aSum(2) = dic.Item(tmp)(2) + aItem(2)
        dic.Item(tmp) = aSum
      End If
    End If
  Next
  For i = 1 To UBound(aDes)
    tmp = CStr(aDes(i, 1))
    If Len(tmp) Then
      If IsNumeric(tmp) Then tmp = "'" & tmp
      aDes(i, 1) = tmp
      If dic.Exists(tmp) Then
        aDes(i, 2) = dic.Item(tmp)(1)
        aDes(i, 3) = dic.Item(tmp)(2)
      End If
    End If
  Next
  Sheets("Data").Range("B4:D20000").Value = aDes
End Sub
Đã kiểm tra bằng SUMIF và phát hiện có sai một vài chỗ nhưng là SUMIF sai chứ không phải code sai. Chẳng hạn hàm SUMIF "tưởng" thằng em 000000917100000009171 là một (1 thằng 6 số 0 và 1 thằng 7 số 0)
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom