如何使用VBA将两个数据透视表合并为一个?
可行解决方法
方法1:整合原始数据源(结合简易VBA简化操作)
数据透视表无法直接合并,优先处理底层原始数据:
- 先将'A Data'和'B Data'中的原始数据源(不是透视表结果)合并为统一表格,再基于新表创建透视表
- 手动复制粘贴效率低的话,用这段适合新手的VBA脚本快速合并:
Sub MergeDataSources() Dim wsA As Worksheet, wsB As Worksheet, wsNew As Worksheet Dim lastRowA As Long, lastRowB As Long, lastRowNew As Long ' 指定数据源工作表 Set wsA = ThisWorkbook.Worksheets("A Data") Set wsB = ThisWorkbook.Worksheets("B Data") ' 新建工作表存储合并后的数据 Set wsNew = ThisWorkbook.Worksheets.Add wsNew.Name = "Merged Data" ' 复制A表的表头与所有数据 wsA.UsedRange.Copy wsNew.Range("A1") lastRowNew = wsNew.UsedRange.Rows.Count ' 复制B表数据(跳过表头,避免重复) lastRowB = wsB.UsedRange.Rows.Count wsB.Range("A2:" & wsB.Cells(lastRowB, wsB.UsedRange.Columns.Count).Address).Copy _ wsNew.Cells(lastRowNew + 1, 1) ' 可选:删除完全重复的记录(根据实际列数调整数组参数) wsNew.UsedRange.RemoveDuplicates Columns:=Array(1, 2, 3), Header:=xlYes End Sub
- 运行脚本后,在生成的"Merged Data"表上插入新数据透视表,将「月份」拖入行/列区域,其他字段按需添加即可
方法2:用Power Query合并(无需编写代码)
适合不想碰VBA的场景:
- 选中'A Data'的数据源区域,点击「数据」选项卡→「从表格/区域」,进入Power Query编辑器
- 点击「追加查询」→「追加查询作为新查询」,选择'B Data'的数据源完成合并
- 在编辑器中可按需清洗数据(补全缺失列、删除重复值等),然后点击「关闭并上载」到新工作表
- 基于这个新表创建数据透视表,按月份汇总数据
方法3:合并透视表结果(仅适用于无法获取原始数据源的情况)
如果只能拿到透视表的最终结果:
- 把两个透视表的结果(跳过表头)复制到同一张空白工作表,确保「月份」列对齐
- 用
SUMIF函数合并相同月份的数值,比如输入=SUMIF($A:$A, $D2, $B:$B)(假设A列是透视表A的月份,B列是对应数值,D列是透视表B的月份) - 将整理后的合并数据做成规范表格,再创建新的数据透视表
注意:若两个数据源字段不完全一致,整合时保留所有字段,缺失值留空即可,透视表会自动处理空值。
内容的提问来源于stack exchange,提问作者Catherine
相关产品推荐
相关产品推荐

