如何在Excel中将列值转成行并合并重复左列数据?
Excel合并重复行并将对应列内容同行展示的方法
以下是三种实用的实现方式,根据你的Excel版本和需求选择:
方法1:Power Query(推荐,无需公式/代码)
- 选中目标数据区域(包含两列),点击「数据」选项卡 → 「从表格/区域」,确认数据范围后进入Power Query编辑器。
- 选中左列(如列1),点击「转换」→「分组依据」:
- 分组依据选择左列名称
- 新列名设为「合并内容」,操作选择「所有行」,点击确定。
- 选中「合并内容」列,点击「添加列」→「自定义列」,输入公式:
Text.Combine([合并内容][列2], " ")(将「列2」替换为你右列的实际名称),点击确定。 - 删除「合并内容」列,保留左列和新生成的自定义列,最后点击「主页」→「关闭并上载」,结果会导出到新工作表。
方法2:TEXTJOIN函数(Excel 2019/365适用)
假设左列是A列,右列是B列,在C2单元格输入公式:
=TEXTJOIN(" ", TRUE, IF($A$2:$A$23=A2, $B$2:$B$23, ""))
- 非365版本按
Ctrl+Shift+Enter作为数组公式输入,365版本直接回车。 - 下拉填充公式后,复制C列并「粘贴为值」,再选中A、C列,点击「数据」→「删除重复值」(仅勾选A列),即可得到去重后的合并结果。
方法3:VBA代码
- 按
Alt+F11打开VBA编辑器,插入新模块,粘贴以下代码:
Sub MergeDuplicates() Dim ws As Worksheet Dim lastRow As Long, i As Long, j As Long Dim dict As Object Set dict = CreateObject("Scripting.Dictionary") Set ws = ActiveSheet lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row For i = 2 To lastRow If Not dict.Exists(ws.Cells(i, "A").Value) Then dict(ws.Cells(i, "A").Value) = ws.Cells(i, "B").Value Else dict(ws.Cells(i, "A").Value) = dict(ws.Cells(i, "A").Value) & " " & ws.Cells(i, "B").Value End If Next i Set ws = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)) ws.Cells(1, 1).Value = "左列值" ws.Cells(1, 2).Value = "合并内容" j = 2 For Each Key In dict.Keys ws.Cells(j, 1).Value = Key ws.Cells(j, 2).Value = dict(Key) j = j + 1 Next Key End Sub
- 返回Excel按
F5运行代码,合并结果会自动生成在新工作表中。
内容的提问来源于stack exchange,提问作者user19610349
相关产品推荐
相关产品推荐

