如何拆分Excel单列成多行并同步复制其余列内容
原表格
| Model | Vendor | Serial Number |
|---|---|---|
| S20 | ABC | 1122334455, 5544332211 |
| S21 | XYZ | 9988776655, 5566778899, 2244668800 |
目标表格
| Model | Vendor | Serial Number |
|---|---|---|
| S20 | ABC | 1122334455 |
| S20 | ABC | 5544332211 |
| S21 | XYZ | 9988776655 |
| S21 | XYZ | 5566778899 |
| S21 | XYZ | 2244668800 |
高效拆分Excel逗号分隔值为多行的方案
方法1:Power Query(推荐,无代码)
这是Excel内置的高效数据处理工具,适配大规模数据:
- 选中包含表头的数据区域,点击「数据」选项卡 → 「从表格/区域」,确认「我的表格有标题」后进入Power Query编辑器。
- 选中「Serial Number」列,点击「转换」选项卡 → 「拆分列」→ 「按分隔符」。
- 设置分隔符为「逗号」,勾选「拆分为行」,点击确定。
- 若拆分后的序列号带前导空格,选中该列后点击「转换」→ 「格式」→ 「修剪」去除。
- 最后点击「主页」→ 「关闭并上载」,拆分结果会自动生成在新工作表中。
方法2:VBA宏(适合批量自动化)
如果需要重复执行此类操作,用VBA可一次性完成:
- 打开目标Excel文件,按
Alt+F11打开VBA编辑器。 - 右键左侧工作簿名称,选择「插入」→ 「模块」。
- 粘贴以下代码到模块中:
Sub SplitSerialNumbers() Dim ws As Worksheet Dim lastRow As Long, i As Long, j As Long Dim serials As Variant Set ws = ActiveSheet lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' 从末行向上遍历,避免插入行打乱计数 For i = lastRow To 2 Step -1 serials = Split(ws.Cells(i, "C").Value, ", ") If UBound(serials) > 0 Then ' 插入对应数量的空行 ws.Rows(i + 1 & ":" & i + UBound(serials)).Insert Shift:=xlDown ' 复制Model和Vendor到新行 ws.Cells(i, "A").Resize(UBound(serials) + 1).Value = ws.Cells(i, "A").Value ws.Cells(i, "B").Resize(UBound(serials) + 1).Value = ws.Cells(i, "B").Value ' 填充拆分后的序列号 For j = 0 To UBound(serials) ws.Cells(i + j, "C").Value = serials(j) Next j End If Next i End Sub
- 返回Excel界面,按
Alt+F8,选择SplitSerialNumbers宏执行即可。
注:代码默认Model在A列、Vendor在B列、Serial Number在C列,表头在第1行,可根据实际表格结构修改列号。
方法3:公式法(仅支持Excel 365/2021)
若你的Excel版本支持动态数组函数,可直接用公式生成结果:
在空白单元格(如D2)输入以下公式,按回车后下拉至所有数据行,最后复制结果粘贴为值:
=HSTACK(TOCOL(IF(TEXTSPLIT(C2, ", ")<>"", A2, ""),3), TOCOL(IF(TEXTSPLIT(C2, ", ")<>"", B2, ""),3), TEXTSPLIT(C2, ", "))
数据量过大时公式可能卡顿,优先推荐前两种方法。
内容的提问来源于stack exchange,提问作者маньяк
相关产品推荐
相关产品推荐

