如何将多结构动态Sheet合并为统一Sheet制作现金流报告
多银行账户交易数据合并解决方案
核心思路
针对不同布局的银行账户Sheet,逐个映射其列到统一结构(Date、Amount、Category、Reference、Tab Name),再合并所有映射结果,最后通过QUERY函数过滤空行并按日期排序,生成动态更新的汇总表。
具体实现步骤
- 创建新Sheet命名为统一汇总表,用于存放合并后的数据。
- 在该Sheet的A2单元格输入以下动态合并公式(需根据实际Sheet列映射调整):
=QUERY({ // 映射第一个银行账户Sheet(示例:Leumi) ARRAYFORMULA(IFERROR({'Leumi'!A2:A, 'Leumi'!C2:C, 'Leumi'!D2:D, 'Leumi'!B2:B, "Leumi"})), // 映射第二个银行账户Sheet(示例:Hapoalim) ARRAYFORMULA(IFERROR({'Hapoalim'!B2:B, 'Hapoalim'!D2:D, 'Hapoalim'!E2:E, 'Hapoalim'!C2:C, "Hapoalim"})), // 映射第三个银行账户Sheet(示例:Mastercard) ARRAYFORMULA(IFERROR({'Mastercard'!A2:A, 'Mastercard'!C2:C, 'Mastercard'!D2:D, 'Mastercard'!B2:B, "Mastercard"})) }, "SELECT * WHERE Col1 IS NOT NULL ORDER BY Col1 ASC", 0)
公式细节说明
{}:垂直堆叠多个Sheet的映射数据数组,实现多表合并。ARRAYFORMULA(IFERROR(...)):批量处理整列数据,自动忽略空行引发的错误。- 每个映射块结构为:
[Date列, Amount列, Category列, Reference列, "Sheet名称"],需根据各银行Sheet的实际列位置修改对应引用。 QUERY(..., "SELECT * WHERE Col1 IS NOT NULL ORDER BY Col1 ASC", 0):过滤无日期的空行,并按日期升序排序(将ASC改为DESC可切换为降序)。
- 为汇总表添加表头:在A1单元格上方插入一行,依次输入Date、Amount、Category、Reference、Tab (sheet) Name。
后续使用
- 动态更新:当各银行Sheet新增交易数据时,统一汇总表会自动同步更新。
- 数据透视表:直接基于统一汇总表创建数据透视表,即可实现动态仪表盘的数据源同步。
内容的提问来源于stack exchange,提问作者Kobi Cohen
相关产品推荐
相关产品推荐

