咨询:如何自动将多工作表指定行数据汇总至Summary表并去重
自动化汇总多工作表数据并去重的解决方案
方案一:用Power Query实现零代码自动化(推荐)
这是Excel内置工具,无需写代码,后续更新只需一键刷新:
- 新建并命名工作表为
Summary - 点击「数据」选项卡 → 获取数据 → 自文件 → 自工作簿,选中当前打开的工作簿
- 在导航器里按住Ctrl选全10个目标工作表,点击「转换数据」进入Power Query编辑器
- 对每个工作表做两步处理:
- 选中所有列(或仅D、L列),点击「主页」→ 删除行 → 删除前4行(跳过前4行,从第5行开始取数)
- 点击「主页」→ 删除行 → 删除空行,清理无数据的行
- 合并所有工作表:在左侧「查询和连接」面板,选中所有转换后的工作表查询,右键选「追加查询」→「将查询追加为新查询」
- 去重:在合并后的查询里,选中要判断重复的列(全列A-P就选所有列,仅D、L就选这两列),点击「主页」→ 删除行 → 删除重复项
- 加载数据:点击「主页」→ 关闭并上载,选择加载到
Summary工作表 - 后续更新:每次源工作表数据变动后,点击「数据」→ 全部刷新,自动同步最新汇总结果
方案二:VBA脚本自定义自动化
适合需要更灵活逻辑的场景,代码可按需修改:
Sub AutoSummaryAndRemoveDuplicates() Dim wsSummary As Worksheet Dim ws As Worksheet Dim lastRow As Long Dim summaryLastRow As Long Dim copyRange As Range ' 定位或创建Summary表 On Error Resume Next Set wsSummary = ThisWorkbook.Worksheets("Summary") On Error GoTo 0 If wsSummary Is Nothing Then Set wsSummary = ThisWorkbook.Worksheets.Add wsSummary.Name = "Summary" End If ' 清空Summary原有数据 wsSummary.Cells.Clear ' 遍历所有工作表 For Each ws In ThisWorkbook.Worksheets If ws.Name <> "Summary" Then ' 跳过汇总表本身 lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' 获取当前表最后一行 If lastRow >= 5 Then ' 确保有第5行及以后的数据 ' 复制范围:全列A-P用"A:P",仅D、L列替换为"D:D,L:L" Set copyRange = ws.Range("A" & 5 & ":P" & lastRow) summaryLastRow = wsSummary.Cells(wsSummary.Rows.Count, "A").End(xlUp).Row ' 粘贴到Summary表的下一行 If summaryLastRow = 1 And wsSummary.Cells(1, "A").Value = "" Then copyRange.Copy wsSummary.Cells(1, "A") Else copyRange.Copy wsSummary.Cells(summaryLastRow + 1, "A") End If End If End If Next ws ' 去重:全列去重用Array(1到16),仅D、L列替换为Array(4,12) wsSummary.Range("A:P").RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16), Header:=xlNo MsgBox "汇总去重完成,数据已更新到Summary表", vbInformation End Sub
使用方法:
- 按Alt+F11打开VBA编辑器,右键工作簿 → 插入 → 模块,粘贴代码
- 按F5运行宏,或者在Excel「开发工具」→ 宏里选择
AutoSummaryAndRemoveDuplicates执行 - 可以给宏绑定一个工作表按钮,以后一键点击就能更新
注意事项
- Power Query无需维护代码,适合普通用户;VBA可自定义逻辑,适合有基础的用户
- 两种方案都能实现可持续自动化,源表数据更新后,只需刷新(Power Query)或运行宏(VBA)即可
内容的提问来源于stack exchange,提问作者Drants
相关产品推荐
相关产品推荐

