You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel多工作表合并:将列转换为唯一行的方案咨询

Excel多工作表数据合并及品牌列转行解决方案

方法一:Power Query(推荐,操作高效无公式)

  • 打开Excel,点击「数据」选项卡 → 「获取数据」→ 「自文件」→ 「自工作簿」,选中当前Excel文件
  • 在导航器窗口按住Ctrl选中所有DATA类工作表,点击「转换数据」进入查询编辑器
  • 选中所有导入的工作表查询,右键选择「合并查询」→ 「将查询追加为新查询」,选择「将所有查询追加为新查询」,得到合并后的全量数据
  • 选中「Brand」列和「Value」列,切换到「转换」选项卡,点击「透视列」,值列选择「Value」,高级选项选「不要聚合」(若有重复数据可按需选求和/平均值等)
  • 调整列顺序,把「Date」「Product」移到最前面,点击「关闭并上载」,生成的新工作表就是你要的统一报表样式

方法二:公式组合(适合轻量数据场景)

  • 先合并所有工作表数据:新建「合并数据」工作表,在A2单元格输入=VSTACK(DATA1!A2:D100, DATA2!A2:D100, DATA3!A2:D100)(替换DATA1/DATA2为实际工作表名,调整行号覆盖全量数据),回车后自动合并所有数据
  • 提取唯一的日期+产品组合:新建「最终报表」工作表,在A2单元格输入=UNIQUE(合并数据!A2:A&"|"&合并数据!B2:B),回车后得到唯一组合;再用=LEFT(A2,FIND("|",A2)-1)提取日期到A列,=RIGHT(A2,LEN(A2)-FIND("|",A2))提取产品到B列
  • 填充各品牌值:在C2(Brand A)输入=XLOOKUP(A2&"|"&B2&"|"&"Brand A",合并数据!A2:A&"|"&合并数据!B2:B&"|"&合并数据!C2:C,合并数据!D2:D,"",0),下拉填充;同理D列(Brand B)、E列(Brand C)替换公式里的品牌名称即可

方法三:VBA脚本(适合批量自动化处理)

  • 按Alt+F11打开VBA编辑器,右键当前工作簿 → 「插入」→ 「模块」,粘贴以下代码:
Sub MergeAndPivotBrands()
    Dim ws As Worksheet, mergeWs As Worksheet, pivotWs As Worksheet
    Dim lastRow As Long, i As Long, j As Long
    Dim uniqueDict As Object, key As Variant
    
    ' 创建/获取合并数据工作表
    On Error Resume Next
    Set mergeWs = ThisWorkbook.Sheets("合并数据")
    If Err.Number <> 0 Then
        Set mergeWs = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
        mergeWs.Name = "合并数据"
    End If
    On Error GoTo 0
    mergeWs.Cells.Clear
    
    ' 合并所有DATA开头的工作表数据
    For Each ws In ThisWorkbook.Sheets
        If Left(ws.Name, 4) = "DATA" Then ' 可根据实际工作表名规则修改
            lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
            ws.Range("A2:D" & lastRow).Copy mergeWs.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
        End If
    Next ws
    
    ' 创建/获取最终报表工作表
    On Error Resume Next
    Set pivotWs = ThisWorkbook.Sheets("最终报表")
    If Err.Number <> 0 Then
        Set pivotWs = ThisWorkbook.Sheets.Add(After:=mergeWs)
        pivotWs.Name = "最终报表"
    End If
    On Error GoTo 0
    
    ' 提取唯一的日期+产品组合
    Set uniqueDict = CreateObject("Scripting.Dictionary")
    lastRow = mergeWs.Cells(Rows.Count, 1).End(xlUp).Row
    For i = 2 To lastRow
        key = mergeWs.Cells(i, 1).Value & "|" & mergeWs.Cells(i, 2).Value
        If Not uniqueDict.Exists(key) Then
            uniqueDict.Add key, Array(mergeWs.Cells(i, 1).Value, mergeWs.Cells(i, 2).Value)
        End If
    Next i
    
    ' 写入表头
    pivotWs.Range("A1:E1") = Array("Date", "Product", "Brand A", "Brand B", "Brand C")
    
    ' 填充各品牌对应值
    j = 2
    For Each key In uniqueDict.Keys
        pivotWs.Cells(j, 1).Value = uniqueDict(key)(0)
        pivotWs.Cells(j, 2).Value = uniqueDict(key)(1)
        ' 匹配Brand A值
        pivotWs.Cells(j, 3).Value = Application.IfError(Application.VLookup( _
            uniqueDict(key)(0) & "|" & uniqueDict(key)(1) & "|" & "Brand A", _
            mergeWs.Range("A:D"), 4, False), "")
        ' 匹配Brand B值
        pivotWs.Cells(j, 4).Value = Application.IfError(Application.VLookup( _
            uniqueDict(key)(0) & "|" & uniqueDict(key)(1) & "|" & "Brand B", _
            mergeWs.Range("A:D"), 4, False), "")
        ' 匹配Brand C值
        pivotWs.Cells(j, 5).Value = Application.IfError(Application.VLookup( _
            uniqueDict(key)(0) & "|" & uniqueDict(key)(1) & "|" & "Brand C", _
            mergeWs.Range("A:D"), 4, False), "")
        j = j + 1
    Next key
    
    MsgBox "合并完成,已生成最终报表!"
End Sub
  • 根据实际工作表名修改代码中Left(ws.Name, 4) = "DATA"的判断规则,确保只合并目标工作表
  • 按F5运行宏,自动完成数据合并和品牌列转行

内容的提问来源于stack exchange,提问作者Ahmed Aljabry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 07:40:40