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, Item:=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
推荐阅读
- laravel - 试图在 Laravel 8 中获取非对象的属性“id”
- java - Appengine Java 上的 getNamedDispatcher
- r - 如何指定在站点生成过程中不复制子目录?
- javascript - vue setInterval/清除间隔定时
- javascript - 如何记录解构函数参数?例如 `a` 当写 `const fn = ({a}) => {/* code */}`
- nearprotocol - 在 near_sdk_rust 中对 UnorderedSet 进行分页
- java - 如何在我的 Java 应用程序中最好地构建和编辑 XML
- python - 将值 1 替换为一副牌中的 Ace
- javascript - 按钮打开页面两次
- sql-server - 尝试在 Microsoft SQL Management Studio 中从不同的 Sql Server 提取数据