如何在Excel中将两列合并为单列并重复其余列对应数据?
原始数据
| Name1 | Name2 | Number | address | arrival_time | checked_NLP |
|---|---|---|---|---|---|
| Abc | bcd | 1 | 11AA | 00:10:10 | yes |
| cde | abc | 2 | 22BB | 00:10:05 | yes |
| bcd | def | 3 | 33CC | 00:10:15 | NO |
目标格式
| Name | Number | address | arrival_time | checked_NLP |
|---|---|---|---|---|
| abc | 1 | 11AA | 00:10:10 | yes |
| bcd | 1 | 11AA | 00:10:10 | yes |
| abc | 2 | 22BB | 00:10:05 | yes |
| cde | 2 | 22BB | 00:10:05 | yes |
| bcd | 3 | 33CC | 00:10:15 | NO |
| def | 3 | 33CC | 00:10:15 | NO |
方法1:Power Query(推荐,高效可复用)
这是Excel自带的批量数据处理工具,操作步骤如下:
- 选中原始数据区域,点击数据选项卡 → 从表格/区域(确认勾选“我的表格有标题”)。
- 在Power Query编辑器中,选中
Name1和Name2列,右键选择逆透视列 → 仅逆透视所选列。 - 删除自动生成的
属性列,将值列重命名为Name。 - 点击主页 → 关闭并上载,结果会自动输出到新工作表,其他列数据会自动对应重复。
方法2:公式手动生成
适合快速小批量处理:
假设原始数据在Sheet1的A1:F4区域,在新工作表(如Sheet2)中:
- A2单元格输入公式,下拉到A7:
=INDEX(Sheet1!$A:$B,INT((ROW()-2)/2)+2,MOD(ROW()-2,2)+1) - B2单元格输入公式,向右填充到E2,再整体下拉到E7:
=INDEX(Sheet1!$C:$F,INT((ROW()-2)/2)+2,COLUMN()-1)
注:若结果起始行不是第2行,需调整公式中ROW()-2的数值。
方法3:VBA宏(适合重复批量处理)
如果需要频繁处理这类数据,可使用宏实现自动化:
- 按
Alt+F11打开VBA编辑器,插入新模块。 - 粘贴以下代码:
Sub SplitNames() Dim srcSheet As Worksheet, destSheet As Worksheet Dim lastRow As Long, i As Long, destRow As Long Set srcSheet = ThisWorkbook.Sheets("Sheet1") ' 替换为原始数据工作表名称 Set destSheet = ThisWorkbook.Sheets.Add ' 写入表头 destSheet.Range("A1:E1") = Array("Name", "Number", "address", "arrival_time", "checked_NLP") destRow = 2 lastRow = srcSheet.Cells(srcSheet.Rows.Count, "A").End(xlUp).Row For i = 2 To lastRow ' 写入Name1对应行 destSheet.Cells(destRow, 1) = srcSheet.Cells(i, 1) destSheet.Cells(destRow, 2) = srcSheet.Cells(i, 3) destSheet.Cells(destRow, 3) = srcSheet.Cells(i, 4) destSheet.Cells(destRow, 4) = srcSheet.Cells(i, 5) destSheet.Cells(destRow, 5) = srcSheet.Cells(i, 6) destRow = destRow + 1 ' 写入Name2对应行 destSheet.Cells(destRow, 1) = srcSheet.Cells(i, 2) destSheet.Cells(destRow, 2) = srcSheet.Cells(i, 3) destSheet.Cells(destRow, 3) = srcSheet.Cells(i, 4) destSheet.Cells(destRow, 4) = srcSheet.Cells(i, 5) destSheet.Cells(destRow, 5) = srcSheet.Cells(i, 6) destRow = destRow + 1 Next i End Sub
- 修改代码中
Sheet1为你的原始工作表名称,运行宏即可生成目标数据。
内容的提问来源于stack exchange,提问作者nizam uddin
相关产品推荐
相关产品推荐

