Google Sheets多维度QUERY/FILTER结果合并带空行的单公式实现
解决方案
首先给出你的原始数据表格:
| 一 | 二 | 三 |
|---|---|---|
| a | c | 41 |
| a | c | 47 |
| a | c | 23 |
| a | d | 9 |
| a | d | 15 |
| a | d | 75 |
| a | e | 56 |
| b | f | 4 |
| b | f | 22 |
| b | f | 76 |
| b | g | 58 |
| b | g | 68 |
| b | g | 54 |
| b | h | 32 |
针对你需要合并不同列数的QUERY/FILTER结果、中间保留两行空白的需求,可以用LET+REDUCE组合实现,无需脚本,单个单元格公式即可完成:
=LET( // 定义各个公式的结果 res1, QUERY(A:C, "SELECT A, SUM(C) WHERE A IS NOT NULL GROUP BY A"), res2, QUERY(A:C, "SELECT A, B, SUM(C) WHERE A IS NOT NULL GROUP BY A, B"), res3, {A1:C1; FILTER(A:C, A:A = "a")}, res4, QUERY(A:C, "SELECT SUM(C) WHERE A IS NOT NULL"), // 计算所有结果的最大列数,统一对齐列数 max_cols, MAX(COLUMNS(res1), COLUMNS(res2), COLUMNS(res3), COLUMNS(res4)), // 创建2行max_cols列的空白行数组 blank_rows, MAKEARRAY(2, max_cols, LAMBDA(r,c, "")), // 逐个合并结果,中间插入空白行 final_result, REDUCE("", {res1, res2, res3, res4}, LAMBDA(acc, curr, IF(acc="", // 第一个结果直接扩展到max_cols列 HSTACK(curr, IFERROR(SEQUENCE(1, max_cols - COLUMNS(curr)), "")), // 后续结果先加空白行,再加扩展列后的当前结果 VSTACK(acc, blank_rows, HSTACK(curr, IFERROR(SEQUENCE(1, max_cols - COLUMNS(curr)), ""))) ) )), final_result )
关键逻辑说明:
- 统一列数:用
MAX(COLUMNS(...))拿到所有结果里的最大列数,再通过HSTACK给列数少的结果补空列,确保所有数组维度兼容 - 插入空白行:用
MAKEARRAY生成指定列数的空白行,每次合并非第一个结果前先插入这两行 - REDUCE遍历合并:通过
REDUCE逐个拼接结果,避免直接用;/VSTACK因维度不匹配报错
如果后续要添加更多公式,只需要:
- 新增
resN变量存储新公式结果 - 在
max_cols的MAX参数里加入COLUMNS(resN) - 在
REDUCE的遍历数组{res1, res2, res3, res4}里加入resN即可
内容的提问来源于stack exchange,提问作者IMTheNachoMan
相关产品推荐
相关产品推荐

