如果这个问题已经存在,我道歉,我搜索了一段时间但找不到任何东西。
我在Excel中有2列,我需要连接1列的值,其中另一列的值相同。作为一个例子,我有这个:
A | B
12 | Value 1
10 | Value 2
13 | Value 3
12 | Value 4
10 | Value 5
我想离开:
A | B
12 | Value 1, Value 4
10 | Value 2, Value 5
13 | Value 3
我有数千行,理想情况下,我希望它能够创建一个包含结果的新工作表,而不是破坏现有工作表。 B列中还有一些空白值,我希望它忽略而不连接。
提前致谢。
答案 0 :(得分:1)
试试这个:
Sub combineValues()
Dim dic As Dictionary
Dim key, val, i, p, k
Set dic = New Dictionary
For i = 1 To Worksheets(1).Range("A65536").End(xlUp).Row
key = Worksheets(1).Cells(i, 1).Value
val = Worksheets(1).Cells(i, 2).Value
If dic.Exists(key) Then
dic.Item(key) = dic.Item(key) & ", " & val
Else
dic.Add key, val
End If
Next
p = 1
For Each k In dic.Keys
Worksheets(2).Cells(p, 1) = k
Worksheets(2).Cells(p, 2) = dic.Item(k)
p = p + 1
Next
End Sub
请注意,您必须在“参考”中包含“Microsoft Scripting Runtime”才能使用Dictionary
。
使用以下[Sheet 1]进行测试:
1 value 1
2 value 2
3 value 3
1 value 4
1 value 5
3 value 6
3 value 7
2 value 8
1 value 9
2 value 10
2 value 11
2 value 12
以下[表2]中的结果:
1 value 1, value 4, value 5, value 9
2 value 2, value 8, value 10, value 11, value 12
3 value 3, value 6, value 7
答案 1 :(得分:0)
我发现Passerby的答案效果很好,但在我的情况下,我有几个列,我运行它,在某些情况下有空单元格。为了避免获得,条目,我添加了这个:
If val <> "" Then
之前
dic.Item(key) = dic.Item(key) & ", " & val