VBA Excel将值添加到字典

好的,也许我只是一直在看这个太久,但我不断得到一个预期的expression式错误,我相信这只是一个语法问题,但我不完全确定。 我循环了一张表,并添加一列的唯一值作为字典的键,同时将与键对应的数字加在一起。 例如,如果我有:

A2
B 3
B 4
A 5
C 6

我希望字典看起来像:

A 7
B 7
C 6

这是我的代码,任何帮助表示赞赏。

Sub Name() Dim rng As Range Dim x As Integer Dim ranga As String Dim dico As Dictionary Set dico = New Dictionary Dim var As Variant Dim lastrow As Integer With Worksheets("Sheet1") lastrow = Range("A" & .Rows.Count).End(xlUp).Row ranga = "C6" & ":" & "C" & CStr(lastrow) Set rng = Range(ranga) For Each var In rng.Cells If dico.Exists(var.Value) Then dico(var.Value) = dico(var.Value) + var.Offset(0, 4).Value Else dico.add var.Value, var.Offset(0, 4).Value End If Next var End With With Worksheets("Sheet2") Set rng = Range("A2") Dim i As Integer i = 0 For Each var In dico.Keys rng.Offset(i).Value = var rng.Offset(i, 1).Value = dico(var) Next var End With End Sub 

我是新的stackoverflow,所以我是一个但不确定适当的礼仪,但这里是一个工作的解决scheme。

 Public Sub dict_counter() Dim counter As New Dictionary Dim key As Range: Set key = ThisWorkbook.Sheets("sheet1").Range("A1") While Not IsEmpty(key) If counter.Exists(key.Value) Then counter(key.Value) = counter(key.Value) + key.Offset(ColumnOffset:=1) Else counter(key.Value) = key.Offset(ColumnOffset:=1) End If Set key = key.Offset(RowOffset:=1) Wend 'Obviously you can output the dict contents to whatever location 'is convenient Dim k As Variant For Each k In counter Debug.Print k; counter(k) Next k End Sub 

代替

 dico(var.Value) = dico(var.Value) + var.Offset(0, 4).Value 

它应该是

 dico.Item(var.Value) = dico(var.Value) + var.Offset(0, 4).Value 

请参阅MSDN

另外,如果你使用With ,你必须实际把领导. 在你想使用它的方法或属性的地方是这样的:

 With Worksheets("Sheet1") lastrow = .Range("A" & .Rows.Count).End(xlUp).Row End With 

请参阅MSDN