Google Sheets Query函数动态引用多工作表实现方案咨询
解决方案
你之前的方案失效是因为
INDIRECT函数仅支持解析单个工作表的单元格/区域引用,无法识别大括号{}拼接的多区域数组字符串,因此无法直接将预生成的引用串转为QUERY可用的数据源。
方案1:下拉适配(匹配原有使用习惯)
直接替换K7单元格的原有公式,下拉填充到K29即可,新增工作表时只要把表名补充到E7:E29对应位置即可自动纳入统计:
=IF(J7="";;SUM(REDUCE(;E7:E29;LAMBDA(acc;sheet_name;IFERROR({acc;QUERY(INDIRECT(sheet_name&"!G:I");"Select Col2 where Col1 = '"&J7&"'";)};acc)))))
逻辑说明:
REDUCE遍历E7:E29存储的所有工作表名,逐表通过INDIRECT读取G:I列数据- 用QUERY匹配当前行J列的标识值,将符合条件的工时数据追加到累计数组中
- 最后对累计的所有工时数据求和,
IFERROR用于过滤无效表名避免报错
方案2:自动溢出(无需手动下拉)
在K7单元格输入以下公式,会自动计算并填充K7到K29的所有结果,后续新增工作表同样只需要更新E列的表名列表即可:
=BYROW(J7:J29;LAMBDA(current_j;IF(current_j="";;SUM(REDUCE(;E7:E29;LAMBDA(acc;sheet_name;IFERROR(FILTER(INDIRECT(sheet_name&"!H:H");INDIRECT(sheet_name&"!G:G")=current_j);acc)))))))
注意事项
- 确保E列存储的工作表名称和实际表名完全一致,无多余空格或特殊符号
- 如果表名包含空格、中文或特殊字符,需要将公式中
INDIRECT(sheet_name&"!G:I")修改为INDIRECT("'"&sheet_name&"'!G:I"),避免引用识别失败
内容的提问来源于stack exchange,提问作者Otávio Teixeira
相关产品推荐
相关产品推荐

