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

如何在Google Sheets的QUERY函数中使用动态数组合并多工作表数据

解决方案

你之前方案失败的核心原因:JOIN生成的是纯文本字符串,而QUERY的第一参数要求的是实际的单元格区域/数组对象,表格公式不会自动解析文本内容里的区域语法、数组语法为可调用的引用,所以两种尝试都不生效。

方案1:半动态配置(无需脚本,适合大多数场景)

你只需要提前维护一个待合并工作表名称列表,后续新增工作表只需要往列表里加名称即可,无需修改QUERY主公式:

  1. 在SheetA的空白列(比如B列),逐行填写需要合并的工作表名称:
    • B1填Sheet1
    • B2填Sheet2
    • 后续新增工作表直接在B列空白行加表名即可
  2. 在SheetA需要输出合并结果的单元格输入公式:
=QUERY(REDUCE(, B:B, LAMBDA(acc, cur_name, IF(cur_name="", acc, VSTACK(acc, INDIRECT(cur_name&"!A1:D13"))))), "select * where [你的筛选条件]", 1)
  • 参数说明:
    • REDUCE会遍历B列所有表名,逐一把对应工作表的A1:D13区域堆叠到结果数组中
    • INDIRECT作用是把拼接好的区域文本转为实际的单元格引用
    • 公式末尾的1代表合并的区域自带1行表头,如果你不需要保留表头可改为0,筛选条件按你原有需求修改即可

方案2:全自动动态识别(需要自定义脚本,新增表无需任何手动操作)

如果不想手动维护表名列表,可以通过谷歌表格的Apps Script写自定义函数自动拉取所有待合并工作表名称:

  1. 点击表格顶部菜单栏「扩展程序」-「Apps Script」,删除默认代码后粘贴以下内容:
function GET_MERGE_SHEETS() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  // 这里排除当前汇总表SheetA,你可以按需修改排除规则
  return ss.getSheets().filter(item => item.getName() !== "SheetA").map(item => item.getName());
}
  1. 保存项目后回到表格,在SheetA的B1单元格输入=GET_MERGE_SHEETS(),会自动生成所有待合并的工作表名称列表
  2. 后续新增工作表后,只要刷新页面就会自动更新表名列表,QUERY公式无需任何修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:48:03