Power BI如何将成对列上下拼接为单一结构化表格
方案1:使用Power Query(无代码,最推荐)
- 选中原始数据区域,点击「数据」选项卡 → 「自表格/区域」导入Power Query编辑器
- 选中SKU、Description、Quantity三列,右键点击「拆分列」:
- SKU和Description列按分隔符「, 」拆分
- Quantity列按分隔符「:」拆分
- 按住Ctrl选中所有拆分后的SKU列,右键点击「逆透视列」,同理操作所有拆分后的Description列
- 筛选掉空值行,保留对应匹配的SKU和Description列,重命名列后点击「关闭并上载」导出到Excel即可
该方法无需手动写公式,后续原始数据更新后只需刷新即可自动生成新的结果,适合批量处理数据。
方案2:公式法(适合小规模数据)
假设拆分后的23个SKU列在BZ列,23个对应Description列在AAAQ列,第一行为表头,第二行开始为原始订单数据:
- 在目标SKU列第一行输入公式:
=INDEX($B$2:$Z$100,INT((ROW(A1)-1)/23)+1,MOD(ROW(A1)-1,23)+1) - 在对应Product列第一行输入公式:
=INDEX($AA$2:$AQ$100,INT((ROW(A1)-1)/23)+1,MOD(ROW(A1)-1,23)+1) - 把公式向下填充,直到出现空值后停止,筛选掉空行即可得到结果
注意把公式里的区域替换成你实际的拆分后数据区域即可。
方案3:VBA脚本(适合高频重复处理场景)
按Alt+F11打开VBA编辑器,插入模块,粘贴以下代码:
Sub 合并SKU和产品信息() Dim wsSource As Worksheet, wsResult As Worksheet Dim i As Long, j As Long, resultRow As Long Const SKU_START_COL = 2 '拆分后SKU第一列的列号,按实际修改 Const DES_START_COL = 25 '拆分后Description第一列的列号,按实际修改 Const COL_COUNT = 23 '每类拆分后的列数 Const DATA_START_ROW = 2 '原始数据起始行 Set wsSource = ActiveSheet '原始数据所在工作表 Set wsResult = ThisWorkbook.Worksheets.Add(after:=wsSource) wsResult.Range("A1:B1") = Array("SKU", "Product") resultRow = 2 For i = DATA_START_ROW To wsSource.Cells(Rows.Count, SKU_START_COL).End(xlUp).Row For j = 0 To COL_COUNT - 1 If wsSource.Cells(i, SKU_START_COL + j) <> "" Then wsResult.Cells(resultRow, 1) = wsSource.Cells(i, SKU_START_COL + j) wsResult.Cells(resultRow, 2) = wsSource.Cells(i, DES_START_COL + j) resultRow = resultRow + 1 End If Next j Next i End Sub
修改代码里的常量参数匹配你的实际表格结构,运行即可自动生成结果工作表。
内容的提问来源于stack exchange,提问作者Sebastian Boar
相关产品推荐
相关产品推荐

