如何将Excel单行多键值对转置为多行?
Excel 拆分数据行实用方法
方法1:Power Query(推荐,无需代码)
操作步骤:
- 选中你的数据区域,点击顶部「数据」选项卡,选择「从表格/区域」(Excel 2016及以后版本支持),根据数据情况确认是否勾选「我的表格有标题」,进入Power Query编辑器
- 在编辑器里,选中第一列(带序号的列),按住Ctrl选中后面所有包含内容的列
- 点击「转换」选项卡,选择「逆透视列」→「逆透视其他列」
- 此时会多出「属性」列,直接删掉这列,只保留序号列和「值」列
- 点击「关闭并上载」,拆分好的数据就会出现在新工作表里
方法2:公式+辅助列(适配低版本Excel)
假设原始数据在A1:C3区域:
- 计算每行需要拆分的条目数:在D1单元格输入
=COUNTA(B1:C1),下拉填充到D3 - 生成重复的序号列:在E1输入
=IF(ROW(A1)<=SUM($D$1:$D$1),$A$1,IF(ROW(A1)<=SUM($D$1:$D$2),$A$2,$A$3)),一直下拉直到单元格出现错误,然后删掉错误行 - 匹配对应的值:在F1输入
=INDEX($B$1:$C$3,MATCH(E1,$A$1:$A$3,0),COUNTIF($E$1:E1,E1)),下拉填充,最后把E:F列复制粘贴为数值即可
方法3:VBA批量处理
按Alt+F11打开VBA编辑器,插入一个新模块,粘贴以下代码:
Sub SplitRows() Dim rng As Range Dim i As Integer, j As Integer, k As Integer Set rng = Range("A1:C3") '把这里改成你的实际数据区域 k = 1 For i = 1 To rng.Rows.Count For j = 2 To rng.Columns.Count If rng.Cells(i, j).Value <> "" Then Cells(k, 5).Value = rng.Cells(i, 1).Value Cells(k, 6).Value = rng.Cells(i, j).Value k = k + 1 End If Next j Next i End Sub
运行代码后,拆分结果会输出到E:F列,可自行调整代码里的输出列位置
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

