坚持使用 VBA SumIf

时间:2021-07-07 14:50:00

标签: excel vba

我一直在尝试处理此 sumif 代码一段时间,但一直收到错误消息(运行时错误 1004 '无法获取工作表函数类的 SumIfs 属性)。有人知道为什么吗?

我正在尝试匹配我在 B 列(基本上是一个表格)上的 ID,并将其与 F 列上存在的所有 ID 匹配。如果有匹配,那么我想获取 ID 的所有数量/值有并总结它们。然后将总和放在 C 列对应 ID 旁边

lastrowB = cnCS.Range("B" & Rows.Count).End(xlUp).Row
Set rngtotalvalue = cnCS.Range("B50:B" & lastrowB)
lastrow = cnCS.Range("F" & Rows.Count).End(xlUp).Row
Set datarange = cnCS.Range("F3:T" & lastrow)

Dim rgColumnC As Range, n As Long
For Each rgColumnC In rngtotal.Rows

    Set columnB = cnCS.Range("S3:S" & lastrow)
    
    totalvalue = Application.WorksheetFunction.SumIf(datarange, rngtotalvalue, columnB)
    rgColumnC.Cells(1, 2) = totalvalue
    
Next rgColumnC


Dim rgWeightRow As Range
For Each rgWeightRow In datarange.Rows

    sAccountNumber = rgWeightRow.Cells(1, 1)
    sEuro = rgWeightRow.Cells(1, 14)
    sTotalValue = Application.WorksheetFunction.VLookup(sAccountNumber, rngtotal, 2, False)
    sWeight = (sEuro / totalvalue)
    rgWeightRow.Cells(1, 15).Value = sWeight

Next rgWeightRow

1 个答案:

答案 0 :(得分:0)

这是一种使用字典来跟踪总和的方法:

Sub SumUp()
    
    Dim dict As Object, data As Range, rw As Range, k, v
    Set dict = CreateObject("scripting.dictionary")
    
    Set data = Sheets("data").Range("A2:X7000") 'for example
    For Each rw In data.Rows
        k = rw.Columns("B").Value                 'id's in ColB
        v = rw.Columns("X").Value                 'values in ColX
        If Len(k) > 0 And IsNumeric(v) Then
            dict(k) = dict(k) + v
        End If
    Next rw
    
    'output the sums
    With Sheets("Summary").Range("A2")
        .Resize(dict.Count).Value = Application.Transpose(dict.keys)
        .Offset(0, 1).Resize(dict.Count).Value = Application.Transpose(dict.Items)
    End With

End Sub

编辑:似乎这更接近你想要的

Sub Tester()

    Dim ws As Worksheet, addrB As String, addrF As String, addrS As String, frm As String
    
    Set ws = ActiveSheet
    addrB = ws.Range("B50:B" & ws.Cells(Rows.Count, "B").End(xlUp).Row).Address
    addrF = ws.Range("F3:F" & ws.Cells(Rows.Count, "F").End(xlUp).Row).Address
    addrS = ws.Range("S3:S" & ws.Cells(Rows.Count, "F").End(xlUp).Row).Address
    
    With ws.Range(addrB).Offset(0, 1)
        .FormulaArray = "=SUMIF(" & addrF & "," & addrB & "," & addrS & ")"
        .Value = .Value
    End With
    
End Sub
相关问题