1

如果 A 列中存在重复项,我想合并 B 列中的值

   A    B
  123   A
  123   B
  123   C
  456   D
  456   E
  789   F

我的输出应该是这样的

  A     B
 123    A B C
 456    D E
 789    F

我有大量数据,很难手动完成,所以你们有什么想法在 Excel 的宏中完成吗?

任何帮助将不胜感激..在此先感谢

4

3 回答 3

3

我会作弊,并使用如下公式;1)按A列排序

2)在col C中,添加一个公式来测试当前是否是最后一个(假设有一个标题,把它放在C2

=if(A2<>A3,TRUE,FALSE)

现在,这应该只适用于一系列相同 ID 中的最后一个单元格

3)在Col D中,如果ID相同,则添加一个用于连接的公式,

=if(A2=A1,D1&" "&B2,B2)

4) 过滤列 C 以仅显示每个系列中的最后一个单元格。

干杯。

于 2013-07-22T06:03:51.910 回答
1

如果您希望原始数据存在于相同单元格中的结果数据,即不存在于单元格 10 中,那么您必须将源数据存储在二维数组中。然后从数组中,我们使用上面的代码将数据插入到原始数据存在的相同位置。这是完成任务的清单:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim names(2 To 7, 2)
For i = 2 To 7
names(i, 1) = Cells(i, 1)
names(i, 2) = Cells(i, 2)
Next
On Error Resume Next:
Sheet1.Cells.Clear
 cnt = 2
    For i = 2 To 7
    strg = strg + names(i, 2)
    If names(i + 1, 1) <> names(i, 1) Then
    Cells(cnt, 1) = names(i, 1)
    Cells(cnt, 2) = strg
    cnt = cnt + 1
    strg = ""
    End If
    Next

End Sub

请注意,我已经声明了带有两个维度的名称数组来存储数据。然后搜索数组以获得结果。

于 2013-07-22T07:02:43.657 回答
1

您可以使用以下宏:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    cnt = 10
    For i = 2 To 7
    strg = strg + Cells(i, 2)
    If Cells(i + 1, 1) <> Cells(i, 1) Then
    Cells(cnt, 1) = Cells(i, 1)
    Cells(cnt, 2) = strg
    cnt = cnt + 1
    strg = ""
    End If
    Next

End Sub

请求的数据将从 Cells 10 打印

于 2013-07-22T06:11:05.667 回答