如何在 Excel 中将重复行转置为列?
作者:互联网
2026-04-08
假设您在 Excel 中有一组数据,现在希望将重复行转置为多列(如下图所示),有没有高效的方法来完成这项任务?
使用 VBA 代码将重复行转置为列

使用 VBA 代码将重复行转置为列
遗憾的是,Excel 中没有直接处理此任务的方法,但您可以通过创建一段 VBA 代码轻松解决。请按以下步骤操作:
1. 按住 ALT + F11 键,即可打开 Microsoft Visual Basic for Applications 窗口。
2. 单击插入> 模块,然后将以下代码粘贴到模块窗口中。
VBA 代码:将重复行转置为多列
Sub ConvertTable()
'Updateby Extendoffice
Dim xArr1 As Variant
Dim xArr2 As Variant
Dim InputRng As Range, OutRng As Range
Dim xRows As Long
xTitleId = "KutoolsforExcel"
Set InputRng = Application.Selection
Set InputRng = Application.InputBox("Range :", xTitleId, InputRng.Address, Type:=8)
Set OutRng = Application.InputBox("Out put to (single cell):", xTitleId, Type:=8)
Set OutRng = OutRng.Range("A1")
xArr1 = InputRng.Value
t = UBound(xArr1, 2): xRows = 1
With CreateObject("Scripting.Dictionary")
.CompareMode = 1
For i = 2 To UBound(xArr1, 1)
If Not .exists(xArr1(i, 1)) Then
xRows = xRows + 1: .Item(xArr1(i, 1)) = VBA.Array(xRows, t)
For ii = 1 To t
xArr1(xRows, ii) = xArr1(i, ii)
Next
Else
xArr2 = .Item(xArr1(i, 1))
If UBound(xArr1, 2) < xArr2(1) + t - 1 Then
ReDim Preserve xArr1(1 To UBound(xArr1, 1), 1 To xArr2(1) + t - 1)
For ii = 2 To t
xArr1(1, xArr2(1) + ii - 1) = xArr1(1, ii)
Next
End If
For ii = 2 To t
xArr1(xArr2(0), xArr2(1) + ii - 1) = xArr1(i, ii)
Next
xArr2(1) = xArr2(1) + t - 1: .Item(xArr1(i, 1)) = xArr2
End If
Next
End With
OutRng.Resize(xRows, UBound(xArr1, 2)).Value = xArr1
End Sub
3. 然后按 F5 键运行此代码,在弹出的对话框中选择要将重复行转换为多列的数据区域,如下图所示:

4. 单击确定,然后在弹出的对话框中选择一个用于放置结果的单元格,如下图所示:

5. 然后单击确定按钮,您的所选数据将转换为如下格式:

借助 KUTOOLS AI 解锁 Excel 的神奇功能
- 智能执行:只需输入简单命令,即可执行单元格操作、分析数据并创建图表。
- 自定义公式:生成量身定制的公式,助您优化工作流程!
- VBA 编码:轻松编写并运行 VBA 代码。
- 公式解析:轻松掌握复杂公式,一目了然!
- 文本翻译:轻松打破电子表格中的语言障碍!
相关标签:
相关推荐
专题
+ 收藏
+ 收藏
+ 收藏
+ 收藏
+ 收藏
+ 收藏
最新数据
相关文章
如何在 Excel 中根据另一个单元格的内容自动显示默认值?
如何设置Excel保护工作表防止修改
如何更改 Excel 中的默认网格线颜色?
如何在 Excel 单元格内换到下一行(4 种方法)
如何在 Excel 中执行区分大小写的 VLOOKUP?
如何将不同工作表或工作簿中的合并区域整合为一个?
如何在 Excel 中记住或保存已更改单元格的先前值?
如何在 Excel 中将大型表格拆分为多个小型表格?
如何在 Excel 中将文件标记为最终状态?
如何在 Excel 中打印标题和网格线?
AI精选
