Xin hỏi cách sử dụng hàm Sumproduct trong VBA

Liên hệ QC

KVP

Thành viên thường trực
Tham gia
7/7/07
Bài viết
218
Được thích
301
Nghề nghiệp
Cộng đồng
Tôi có bảng tính muốn tính số lao động có mã "TN" có tháng =04/2009 trong bảng tính
sử dụng hàm Sumproduct mà không cho ra kết quả. Mong các anh chị chỉ dùm.

Mã:
Sub sumpoduct1()
Dim endR As Long
Dim rng As Range, rngSum As Range
    endR = [a65000].End(xlUp).Row
    Set rng = Range("A1,A" & endR)
    Set rngSum = Range("B2,B" & endR)
    'Cells(endR + 1,2) = Evaluate([sumproduct((rng=cells(2,1))*1,(rngsum="TN")*1)])
    Cells(endR + 1,2) = CDbl([sumproduct((rng=cells(2,1))*1,(rngsum="TN")*1)])
End Sub
 

File đính kèm

  • Sumproduct.xls
    39.5 KB · Đọc: 157
Lần chỉnh sửa cuối:
Làm đại.
Mình tổng hợp tất cả mã và tất cả ngày vào sheet "Summary"
Từ đó sheet2 dùng hàm INDEX+MATCH lấy ra số liệu theo mã và ngày tương ứng
Mã:
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: 8
Upvote 0
Web KT

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

Back
Top Bottom