【发布时间】:2018-07-23 04:38:54
【问题描述】:
我是 VBA 的绝对新手。我想在字典中添加多个值,以按项目的数量对具有相同值的表进行分组。 所以我有这张桌子
1 10 A5 Text1 Audi1 Auto1 100
2 10 A5 Text1 Audi1 Auto1 100
3 10 A5 Text1 Audi1 Auto1 100
4 10 A4 Text4 Audi4 Auto4 200
5 10 A6 Text5 Audi5 Auto5 300
6 10 A6 Text5 Text5 Text5 300
7 10 A5 Text1 Audi1 Auto1 100
8 10 A4 Text4 Audi4 Auto4 200
9 10 A2 Text9 Audi9 Auto9 50
10 10 A1 Text10 Audi10 Auto10 25
现在我想将它们组合在一起,它应该如下所示:
1 40 A5 Text1 Audi1 Auto1 100
2 20 A4 Text4 Audi4 Auto4 200
3 20 A6 Text5 Audi5 Auto5 300
4 10 A2 Text9 Audi9 Auto9 50
5 10 A1 Text10 Audi10 Auto10 25
我的实际 VBA 是这样的:
Sub Schaltfläche1_Klicken()
Dim WkSh As Worksheet
Dim aTemp As Variant
Dim lZeile As Long
Dim rZelle As Range
Dim Dict As Variant
Set WkSh = ThisWorkbook.Worksheets("Tabelle1")
With WkSh ' die Fahrzeuge aus A2:Bn in einen temporären Array schreiben
aTemp = .Range("B13:G" & .Cells(.Rows.Count, 1).End(xlUp).Row)
End With
WkSh.Range("B13:G1000").ClearContents ' den Bereich D2:E100 leeren/löschen
Set Dict = CreateObject("Scripting.Dictionary")
On Error Resume Next
' die Daten an das Dictionary übergeben
For lZeile = 1 To UBound(aTemp)
Dict(aTemp(lZeile, 2)) = Dict(aTemp(lZeile, 2)) + aTemp(lZeile, 1)
Next lZeile
'
' ausgeben
'
Set rZelle = WkSh.Cells(13, 2) ' Bereich festlegen wo hingeschrieben werden soll Beispiel: cells(5,1) -> Reihe 5 Spalte 1
'
Application.EnableEvents = False
rZelle.Resize(Dict.Count) = WorksheetFunction.Transpose(Dict.Items)
rZelle.Offset(0, 1).Resize(Dict.Count) = WorksheetFunction.Transpose(Dict.Keys)
Application.EnableEvents = True
End Sub
然后给我这个输出:
1 40 A5
2 20 A4
3 20 A6
4 10 A2
5 10 A1
有人可以帮助我,以实现我想要的输出。
【问题讨论】:
-
最好用adodb和SQL求和。然后您需要知道字段名称。
-
Audi 和 Auto 列似乎包含 2 个额外的 Text5 值
-
删除 On Error Resume Next 以防任何错误被屏蔽。
-
看看this SQL 解决方案。
-
原始样本数据中是B13中的1还是10?
标签: vba excel dictionary