答案1
将此宏放在标准模块中并运行它:
Sub Macro1()
Dim i As Long, j As Long, k As Long, Na As Long
Dim v As String, Nc As Long
Columns("A:A").Copy Columns("C:C")
ActiveSheet.Range("C:C").RemoveDuplicates Columns:=1, Header:=xlYes
Na = Cells(Rows.Count, "A").End(xlUp).Row
Nc = Cells(Rows.Count, "C").End(xlUp).Row
For i = 2 To Nc
k = 4
v = Cells(i, "C").Value
For j = 2 To Na
If v = Cells(j, 1).Value Then
Cells(i, k) = Cells(j, 2).Value
k = k + 1
End If
Next j
Next i
End Sub
以下是一些示例输出:
如你所见,我们假设输入是列A和乙。输出位于其旁边的列中。代码不关心数据是否已排序。
答案2
我经常这样做,但不使用 VBA,只需几个步骤:
1)首先按 ID 对数据进行排序,以便将它们分组在一起
2)然后,在 C2 中:=if(A1=A2,if(A2=A3,B1&","&B2, "Last,"&B1&","&B2),B2)
3)将其删除
4)复制并粘贴 C 列作为值(假设为 D 列),以删除公式
5)按 D 列排序,删除所有未显示“最后”的内容
6) 选择 D 列,数据选项卡 > 文本到列 > 分隔 > 选择逗号 > 确定
现在所有内容都分成了不同的列,与 ID 位于同一行。您可以删除 B 列和 C 列,因为它们不再需要