cách chuyển hàm Sumpoduct thành code VBA

Liên hệ QC

a0907092389

Thành viên mới
Tham gia
11/6/15
Bài viết
5
Được thích
0
Hi các anh
nhờ các anh viết giúp em code VBA cho hàm sumproduct trong sheet 2 với ạ. các ô trong sheet 2 có hàm Sumproduct em cần đổi thành VBA hết để phát triễn trang tính số lượng lớn ấy ( trang tính thực tế hơn 1000*1000 ô ạ). file đính kèm là em làm ví dụ, còn thực tế nếu làm hết thì số lượng hàm sumproduct quá khủng làm máy chạy như rùa phải hơn 30p mới tính xong. nên em đinh chuyển sang VBA thử xem có nhanh hơn không. nhờ các anh chỉ giáo giúp ạ. em đang tập tành viết Code VBA. sẵn tiện có ACE nào có sách nào hay cho người mới bắt đầu thì cho mình xin địa chỉ mua và tên sách với ạ.
thanks all
 

File đính kèm

  • Sumproduct VBA.xlsm
    141.4 KB · Đọc: 4
Hi các anh
nhờ các anh viết giúp em code VBA cho hàm sumproduct trong sheet 2 với ạ. các ô trong sheet 2 có hàm Sumproduct em cần đổi thành VBA hết để phát triễn trang tính số lượng lớn ấy ( trang tính thực tế hơn 1000*1000 ô ạ). file đính kèm là em làm ví dụ, còn thực tế nếu làm hết thì số lượng hàm sumproduct quá khủng làm máy chạy như rùa phải hơn 30p mới tính xong. nên em đinh chuyển sang VBA thử xem có nhanh hơn không. nhờ các anh chỉ giáo giúp ạ. em đang tập tành viết Code VBA. sẵn tiện có ACE nào có sách nào hay cho người mới bắt đầu thì cho mình xin địa chỉ mua và tên sách với ạ.
thanks all
Thử xem ở đây xem sao.
 
Upvote 0
Bài này giải rồi mà bạn, chưa coi đến à
 
Upvote 0
Bài này giải rồi mà bạn, chưa coi đến à
bên post em post ké bên kia không thấy có lời giải anh ơi :(
 
Upvote 0
Bài #21 đó. Thôi mình post lại ở đây vậy.
PHP:
Option Explicit
Sub test()
Dim lr&, i&, j&, k&, t&, rng, arr()
Dim dic As Object, key
Set dic = CreateObject("Scripting.Dictionary")
With Sheets("Sheet1")
    lr = .Cells(Rows.Count, "C").End(xlUp).Row
    .Range("ZZ3:ZZ" & lr).Value = Evaluate("=row(ZZ1:ZZ" & lr - 2 & ")")
    .Range("A3:ZZ" & lr).Sort .Range("C2")
    rng = .Range("C2:CB" & lr).Value2
    ReDim arr(1 To lr, 1 To UBound(rng, 2))
    For j = 2 To UBound(rng, 2)
        arr(1, j) = rng(1, j)
    Next
    k = 1
    For i = 2 To UBound(rng)
        If Not dic.exists(rng(i, 1)) Then
            k = k + 1
            For j = 1 To UBound(rng, 2)
                arr(k, j) = rng(i, j)
            Next
            dic.Add rng(i, 1), arr
        Else
            For t = 1 To k
                If arr(t, 1) = rng(i, 1) Then
                    For j = 2 To UBound(rng, 2)
                        arr(t, j) = arr(t, j) + rng(i, j)
                    Next
                    Exit For
                End If
            Next
            dic(rng(i, 1)) = arr
        End If
    Next
    .Range("A3:ZZ" & lr).Sort .Range("ZZ2")
    .Columns("ZZ").ClearContents
End With
If Not Evaluate("=ISREF(Summary!A1)") Then
    Sheets.Add after:=Sheets(Sheets.Count)
    ActiveSheet.Name = "Summary"
End If
With Sheets("Summary")
    .Cells.ClearContents
    .Range("A1").Resize(UBound(arr, 2), UBound(arr)).Value = Application.Transpose(arr)
    .Rows(1).NumberFormat = "dd/mm/yyyy"
End With
End Sub
 

File đính kèm

  • Sumproduct VBA.xlsm
    291.9 KB · Đọc: 12
Upvote 0
Bài #21 đó. Thôi mình post lại ở đây vậy.
PHP:
Option Explicit
Sub test()
Dim lr&, i&, j&, k&, t&, rng, arr()
Dim dic As Object, key
Set dic = CreateObject("Scripting.Dictionary")
With Sheets("Sheet1")
    lr = .Cells(Rows.Count, "C").End(xlUp).Row
    .Range("ZZ3:ZZ" & lr).Value = Evaluate("=row(ZZ1:ZZ" & lr - 2 & ")")
    .Range("A3:ZZ" & lr).Sort .Range("C2")
    rng = .Range("C2:CB" & lr).Value2
    ReDim arr(1 To lr, 1 To UBound(rng, 2))
    For j = 2 To UBound(rng, 2)
        arr(1, j) = rng(1, j)
    Next
    k = 1
    For i = 2 To UBound(rng)
        If Not dic.exists(rng(i, 1)) Then
            k = k + 1
            For j = 1 To UBound(rng, 2)
                arr(k, j) = rng(i, j)
            Next
            dic.Add rng(i, 1), arr
        Else
            For t = 1 To k
                If arr(t, 1) = rng(i, 1) Then
                    For j = 2 To UBound(rng, 2)
                        arr(t, j) = arr(t, j) + rng(i, j)
                    Next
                    Exit For
                End If
            Next
            dic(rng(i, 1)) = arr
        End If
    Next
    .Range("A3:ZZ" & lr).Sort .Range("ZZ2")
    .Columns("ZZ").ClearContents
End With
If Not Evaluate("=ISREF(Summary!A1)") Then
    Sheets.Add after:=Sheets(Sheets.Count)
    ActiveSheet.Name = "Summary"
End If
With Sheets("Summary")
    .Cells.ClearContents
    .Range("A1").Resize(UBound(arr, 2), UBound(arr)).Value = Application.Transpose(arr)
    .Rows(1).NumberFormat = "dd/mm/yyyy"
End With
End Sub
thanks anh rất nhiều ạ
 
Upvote 0
Web KT

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

Back
Top Bottom