程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了VBA Excel:枚举重复的总数。计数和求和大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决VBA Excel:枚举重复的总数。计数和求和?

开发过程中遇到VBA Excel:枚举重复的总数。计数和求和的问题如何解决?下面主要结合日常开发的经验,给出你关于VBA Excel:枚举重复的总数。计数和求和的解决方法建议,希望对你解决VBA Excel:枚举重复的总数。计数和求和有所启发或帮助;

VBA Excel:枚举重复的总数。计数和求和

左侧是假设的数据库。右边是我想要得到的结果。 我想打印所有类型 B 的项目,以及总和和计数。 我被卡住了,无法继续。你能帮我一下吗?谢谢。

Private Sub Commandbutton1_Click()

Dim dicdistincts As Scripting.Dictionary,_
    dicDuplicates As Scripting.Dictionary
Set dicdistincts = New Scripting.Dictionary
Set dicDuplicates = New Scripting.Dictionary

Dim i As Integer

For i = 2 To 10
    If Cells(i,1).Value = "B" Then
        If Not dicdistincts.Exists(Cells(i,2).Value) Then
        
            dicdistincts.Add Key:=Cells(i,2).Value,Item:=Cells(i,2).Value
        Else
        
            dicDuplicates.Add Key:=Cells(i,2).Value
        End If
    End If
Next i

For i = 0 To dicDuplicates.Count - 1
    Cells(i + 1,9).Value = WorksheetFunction.CountIfs(Range("a2:a10"),"B",Range("b2:b10"),dicdistincts.keys(i))
Next i

End Sub

编辑:我尝试使用countifs,但香蕉、苹果和草莓返回0

编辑 2:我更正了计数。现在它可以工作了。

解决方法

如果您必须使用字典,那么您可以使用单个字典来完成此操作,将计数和数量作为数组存储为字典中的值。

Private Sub CommandButton1_Click()
Dim dic As Scripting.Dictionary
Dim arrData()
Dim i As Long
Dim ky As Variant

    Set dic = New Dictionary

    For i = 2 To 10
        If Cells(i,1).Value = "B" Then
            ky = Cells(i,2).Value
            If Not dic.Exists(ky) Then
                arrData = Array(1,Cells(i,3).Value)
            Else
                arrData = dic(ky)
                arrData = Array(arrData(0) + 1,arrData(1) + Cells(i,3).Value)
            End If
            dic(ky) = arrData
        End If
    Next i

    Range("A1:C1").Copy Range("E1:G1")
    For i = 0 To dic.Count - 1
        Range("E" & i + 2) = dic.Keys(i)
        Range("F" & i + 2).Resize(,2) = dic.Items(i)
    Next i

End Sub
,

带双字典的唯一和和唯一计数

Option Explicit

Private Sub CommandButton1_Click()

    Dim rg As Range
    With Range("A1").CurrentRegion
        Set rg = .Resize(.Rows.Count - 1).Offset(1)
    End With
    Dim Data As Variant: Data = rg.Value
    
    Dim cDict As Object: Set cDict = CreateObject("Scripting.Dictionary")
    Dim sDict As Object: Set sDict = CreateObject("Scripting.Dictionary")

    Dim i As Long
    
    For i = 1 To UBound(Data,1)
        If Data(i,1) = "B" Then
            cDict(Data(i,2)) = cDict(Data(i,2)) + 1 ' Count
            sDict(Data(i,2)) = sDict(Data(i,2)) + Data(i,3) ' Sum
        End If
    Next i
    
    ReDim Data(1 To cDict.Count,1 To 3)
    i = 0
    
    Dim Key As Variant
    
    For Each Key In cDict.Keys
        i = i + 1
        Data(i,1) = Key
        Data(i,2) = sDict(Key)
        Data(i,3) = cDict(Key)
    Next Key
    
    With Range("E2").Resize(,3)
        .Resize(i).Value = Data
        .Resize(.Worksheet.Rows.Count - .Row - i + 1).Offset(i).ClearContents
    End With

End Sub
,

这应该可以工作,它使用循环遍历所有 bs 并将它们添加到另一个列表中

Sub countBs()


Dim Bs As Range 'list of the line of all Bs
Dim B As Range 'each indiviual b in the B list
Dim Item As Range 'each indivual item
Dim adder As Range 'resturns nothing if b not fond in times

Set Bs = Range("a2",Range("a2").End(xlDown)) 'you can also change this ofcourse to a specifici range or user selected


For Each B In Bs
    If B = "B" Then
        Set adder = Range("g2",Range("g2").End(xlDown)).Find(B.Offset(0,1))
        If adder Is Nothing Then
            If Range("g2") = "" Then
                Set Item = Range("g2")
            Else
                Set Item = Range("g1").End(xlDown).Offset(1,0)
            End If
            Item.Resize(1,2).Value = B.Offset(0,1).Resize(1,2).Value
            Item.Offset(0,2) = 1
        Else
            adder.Offset(0,1).Value = adder.Offset(0,1).Value + B.Offset(0,2).Value
            adder.Offset(0,2).Value = adder.Offset(0,2).Value + 1
        End If
    End If
Next B


End Sub

大佬总结

以上是大佬教程为你收集整理的VBA Excel:枚举重复的总数。计数和求和全部内容,希望文章能够帮你解决VBA Excel:枚举重复的总数。计数和求和所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: