我有一张很大的 Excel 表,需要用逗号分隔,格式如下这是示例 Excel 表。我需要将 column2 中的每个数据条目用逗号分隔,并将其放在工作表中的新行中,但要为每个新条目复制 column1 中的标签。因此,如果示例中的第 1 行已分隔,那么我将有 5 行显示 tag1,以及来自 column2 的 5 个独立数据。
编辑:澄清我的意思
我的表格当前格式如下:
Column 1 | Column 2
----------------------------
tag1 | data1,data2,data3
tag2 | data4,data5,data6
我试图让它像这样:
Column 1 | Column 2
-------------------
tag1 | data1
tag1 | data2
tag1 | data3
tag2 | data4
tag2 | data5
tag2 | data6
答案1
这是一个相当简单的方法,可以完全避免使用公式/VBA。您只需要访问Power Query
,这是最新 Excel 的内置功能,但可下载用于 Excel-2010。
样本数据
脚步
- 选择所有数据
- 转到
Data
选项卡(或Power Query
当它是插件时)并选择From Table
。确认您的数据有标题。 - 将打开一个新选项卡。但选择“Column2”并单击
Split Column
(在Start
选项卡或上)Transform
。选择拆分分隔符! - 在下一个菜单中,对我来说,标准分隔符是逗号。如果需要,请更改它。然后点击
Advanced
并选择拆分为行。 - 打
OK
。
- 此外,为了清理目的,右键单击“Column2”标题
Transform
>>Trim
。 - 并退出
Power Query
,选择节省任何变化。
结果
答案2
您正在尝试的操作看起来可以通过使用宏(VBA 代码)来实现。
Sub SplitColumnToRow()
Dim objRegex As Object
Dim X
Dim Y
Dim lngRow As Long
Dim lngCnt As Long
Dim tempArr() As String
Dim strArr
Set objRegex = CreateObject("vbscript.regexp")
objRegex.Pattern = "^\s+(.+?)$"
X = Range([A3], Cells(Rows.Count, "B").End(xlUp)).Value2
ReDim Y(1 To 2, 1 To 1000)
For lngRow = 1 To UBound(X, 1)
tempArr = Split(X(lngRow, 2), ",")
For Each strArr In tempArr
lngCnt = lngCnt + 1
If lngCnt Mod 1000 = 0 Then ReDim Preserve Y(1 To 2, 1 To lngCnt + 1000)
Y(1, lngCnt) = X(lngRow, 1)
Y(2, lngCnt) = objRegex.Replace(strArr, "$1")
Next
Next lngRow
[C3].Resize(lngCnt, 2).Value2 = Application.Transpose(Y)
End Sub
怎么运行的:
- 要打开 VBA 编辑器,请按Alt+F11或者R右键单击 Sheet
TAB
。 - 现在打五查看代码。
- C奥皮&磷粘贴此代码。
- 年代平均西工作簿作为米acro 已启用。
- 最后R联合国宏观。
注意:
- 在此代码中
Range([A3], Cells(Rows.Count, "B")
,和[C3].Resize(lngCnt, 2).Value2
,单元格引用是可编辑的。
您可以根据需要调整它们。