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

如何用Lambda函数堆叠多查询数组并筛选指定行?

多表筛选结果堆叠并保留表头的解决办法

你的原公式为啥没用?

你写的MAP+LAMBDA其实是返回了三个独立的查询结果数组,没把它们合并成一个连贯的大数组。而且VSTACK放在MAP里面,只能处理单个表的结果,没法把多个表的结果叠在一起,这就是问题所在。

两种可行的正确公式

办法1:用REDUCE循环合并(推荐)

这个办法会自动给每个表的筛选结果加上表头,就算某个表没有D列=Y的行,也会保留它的表头:

=REDUCE("", {"Table1";"Table2";"Table3"}, LAMBDA(acc, tab, 
  VSTACK(acc, 
    INDIRECT(tab)&"!A1:D1",  // 取当前表的表头
    QUERY(INDIRECT(tab), "select * where Col4='Y' offset 1")  // 筛D列=Y的行,跳过原表头避免重复
  )
))

注:加offset 1是因为已经单独取了表头,不然查询结果会自带表头,导致重复显示。

办法2:MAP加外层VSTACK(支持加分隔空行)

要是你想在不同表的结果之间加个空行分隔,可以用这个:

=VSTACK(
  MAP({"Table1";"Table2";"Table3"}, LAMBDA(tab, 
    VSTACK(
      INDIRECT(tab)&"!A1:D1",
      QUERY(INDIRECT(tab), "select * where Col4='Y' offset 1"),
      {"","","",""}  // 这里是空行,不想加就删掉这一行
    )
  ))
)

示例效果参考

假设:

  • Table1有2行D列值为Y,Table2有1行,Table3没有符合条件的行
    用办法1得到的结果会是:
  1. Table1表头 + 2行符合条件的数据
  2. Table2表头 + 1行符合条件的数据
  3. Table3表头

用办法2的话,每个表的结果后面会多一行空的分隔行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:12:34