数据分析

Excel QUERY 函数替代方案:财务模型完整指南(2026)

ModelMonkey2026年7月11日阅读约 3 分钟

FP&A 分析师最常用的 4 种 QUERY 模式是 WHERE、ORDER BY、SELECT DISTINCT 和 GROUP BY。Excel 能干净地处理其中 3 种,第 4 种需要变通。以下是在真实数据场景下,每种替代写法的具体形态。

QUERY 语法与 Excel 等效函数:速查表

QUERY 子句Excel 等效函数说明
SELECT A, B, CCHOOSE({1,2,3}, A:A, B:B, C:C)配合 FILTER 实现列选择
WHERE x = 'val'FILTER(range, condition)* 表示 AND,+ 表示 OR
ORDER BY D DESCSORTBY(range, sort_col, -1)排序键可以不在输出范围内
SELECT DISTINCT AUNIQUE(A:A)可与 FILTER 和 SORT 灵活组合
GROUP BY A, SUM(B)UNIQUE() + SUMIFS(…, A2#)溢出引用是关键
LIMIT nTAKE(result, n)适用于 Excel 365(2022+)

根据 Google Visualization API Query Language 文档,QUERY 使用"类 SQL 查询语言",共支持 12 个子句。截至 2026 年 7 月,Excel 的动态数组函数组合能够可靠覆盖其中 8 个。

WHERE → FILTER(含列选择)

FILTER 返回整行数据。QUERY 允许在行内指定列--例如 SELECT B, D, F WHERE...,而 FILTER 不支持这一点。

解决方案是使用 CHOOSE 配合数组常量,在 FILTER 求值前后选取特定列。以下示例用于筛选合同金额 500 万元以上的 ARR 收入明细:

=FILTER(
  CHOOSE({1,2,3},
    '收入明细'!B2:B5000,   -- 客户名称
    '收入明细'!D2:D5000,   -- 收入类型
    '收入明细'!F2:F5000),  -- 合同金额
  ('收入明细'!C2:C5000 = "ARR") *
  ('收入明细'!F2:F5000 >= 5000000)
)

* 运算符表示 AND 逻辑,+ 表示 OR。对于跨标签页引用假设参数表的多条件筛选:

=FILTER(
  CHOOSE({1,2,3,4},
    '总账明细'!A2:A10000,
    '总账明细'!C2:C10000,
    '总账明细'!D2:D10000,
    '总账明细'!F2:F10000),
  ('总账明细'!B2:B10000 = 参数表!$B$4) *
  ('总账明细'!E2:E10000 >= 参数表!$C$3) *
  ('总账明细'!E2:E10000 <= 参数表!$D$3)
)

主体筛选条件锚定至 参数表!$B$4,日期区间取自 $C$3:$D$3。这就是季度实际数拉取的典型公式结构--CFO 在汇报前 20 分钟要求你切换主体重新跑一遍,靠的就是这类写法。

ORDER BY → SORTBY

SORT 处理单列升序/降序排列,而当排序键不在输出范围内时,就需要 SORTBY--这种情况在贡献毛利表、项目排名和 SKU 绩效汇总中极为常见。

以下示例对在售 SKU 按毛利金额降序排列,仅展示产品名称和收入:

=SORTBY(
  FILTER(
    CHOOSE({1,2}, 'SKU明细'!A2:A500, 'SKU明细'!C2:C500),
    'SKU明细'!E2:E500 = "在售"
  ),
  FILTER('SKU明细'!D2:D500, 'SKU明细'!E2:E500 = "在售"),
  -1
)

排序数组必须与输出数组逐行对应。内层 FILTER 的排序键筛选条件必须与外层完全一致,否则会返回 #VALUE! 错误--这是最常见的踩坑点。

SELECT DISTINCT → UNIQUE

QUERY 的 SELECT DISTINCT 对应 Excel 中的 UNIQUE,且组合使用更灵活。

以下示例为成本中心差异报告生成动态维度列表,并按字母顺序排列:

=SORT(UNIQUE('总账明细'!D2:D10000))

两个函数搞定。同样的需求在 QUERY 中要写 SELECT DISTINCT D ORDER BY D,还要单独处理标题行。

UNIQUE 在真实财务模型中的核心价值在于:为汇总表自动生成行标签,当总账中新增成本中心时自动扩展,无需刷新数据透视表,无需维护硬编码列表,也不会因年中增加新部门而出现引用错误。

GROUP BY--唯一需要变通的场景

这是 QUERY 类比最难成立的地方。QUERY 的 GROUP BY 聚合是单一公式;Excel 没有直接等效写法,需要两个公式配合完成。

做法:UNIQUE 生成维度列表,SUMIFS 配合溢出引用完成聚合。

在 A 列(维度标签,自动向下溢出):

=SORT(UNIQUE('总账明细'!B2:B3000))

在 B 列(汇总 EBITDA,单个公式覆盖整列):

=SUMIFS('总账明细'!F2:F3000, '总账明细'!B2:B3000, A2#)

A2# 溢出引用是关键。SUMIFS 对溢出范围内的每个值逐一求和,并返回对应数组--每个业务单元一个结果。这用 2 个公式复现了 SELECT B, SUM(F) GROUP BY B ORDER BY B 的效果。

对于多条件分组--例如按主体和费用类别汇总 EBITDA,从损益表中拉取 5000 行以上的实际数:

=SUMIFS(
  '损益表'!D2:D5000,                                  -- 求和字段
  '损益表'!B2:B5000, 维度表!A2#,                      -- 主体(溢出引用)
  '损益表'!C2:C5000, ">=" & 参数表!$C$3,              -- 期间起始
  '损益表'!C2:C5000, "<=" & 参数表!$D$3,              -- 期间截止
  '损益表'!E2:E5000, "运营费用"                        -- 科目类型
)

这种写法比 QUERY 更冗长,但审阅起来更清晰。每个条件一目了然,审计人员无需在测试环境中运行公式即可逐项追溯。

版本限制:很少有人提到的硬约束

FILTER、SORT、SORTBY 和 UNIQUE 要求 Excel 365 或 Excel 2021,不支持 Excel 2019 及更早版本。根据微软 Excel 官方文档,这些动态数组函数于 2019 年随 Excel 365 引入,Excel 2021 永久授权版本在当年 10 月跟进。

如果你的模型需要在旧版 Excel 上打开--这在大型金融机构中很常见,IT 部门的系统更新往往滞后现实版本 3 年以上--所有动态数组公式都会报错。FILTER 会变成 #NAME?,聚合只能退回 SUMIFS,筛选只能用 INDEX/MATCH,GROUP BY 相关需求只能依赖数据透视表。

在银团贷款尽调中,对手方往往在受控环境下用 Excel 2016 或 2019 打开你的文件,这是一个实实在在的制约。QUERY 在 Google Sheets 中同样存在可移植性问题(无法跨文件引用),但至少在平台内部表现一致。

QUERY 能做而 Excel 仍难以实现的两件事

有两种模式至今没有简洁的对应方案:

内联计算列。 QUERY 支持 SELECT A, B*C AS gross_profit WHERE...,直接在输出中返回计算列。FILTER 只能返回已存储的字段值,必须借助辅助列,或使用 BYROW/LAMBDA--后者在 Excel 365 中可用,但截至 2026 年中期,在大多数 FP&A 模型中仍非标准做法。

PIVOT 子句。 QUERY 可以将行值动态转置为列标题。Excel 没有对等的标准公式方案,只能借助 VBA 或 Power Query。如果你原来的 QUERY 在做交叉透视,这是目前在标准 Excel 公式体系内真正没有干净替代方案的场景。

常见问题

Excel 有没有和 QUERY 完全等效的单一函数?

没有。Excel 没有内置的 QUERY 函数。FILTER、SORTBY、UNIQUE 和 SUMIFS 的组合可以覆盖绝大多数场景,但 QUERY 支持的 12 个子句中,仍有 4 个(包括 PIVOT 和内联计算列)在标准 Excel 公式体系内缺乏简洁的替代方案。

FILTER 函数需要哪个版本的 Excel?

FILTER、SORT、SORTBY 和 UNIQUE 均要求 Excel 365 或 Excel 2021,不兼容 Excel 2019 及更早版本。在旧版环境中,这些公式会返回 #NAME? 错误,需改用 INDEX/MATCH 和 SUMIFS 手动实现筛选与聚合逻辑。

如何在 Excel 中实现 GROUP BY 聚合?

标准做法是两步走:先用 SORT(UNIQUE(...)) 生成唯一维度列表(溢出至某一列),再用 SUMIFS(..., 维度列, A2#) 配合溢出引用完成逐行聚合。这与 QUERY 的单公式 GROUP BY 在逻辑上等价,但需要占用两列区域。

QUERY 的 PIVOT 子句在 Excel 中如何替代?

标准公式体系内目前没有直接等效方案。可选路径包括:使用 Power Query 的"透视列"功能、编写 VBA 宏动态生成列标题,或将交叉透视逻辑迁移至数据透视表。如果原模型深度依赖 PIVOT 子句,从 Google Sheets 迁移至 Excel 前需重新评估报告结构。

从 Google Sheets 迁移含 QUERY 公式的模型,需要多长时间?

取决于公式数量和复杂度。一个包含 15-20 个 QUERY 公式的模型,资深分析师手工逐一拆解、重写,通常需要 2-3 小时。主要耗时在于:理清每个 QUERY 的列选择逻辑、将 GROUP BY 拆分为 UNIQUE + SUMIFS 组合,以及验证输出结果与原公式一致。

批量重建 QUERY 公式

如果你要将一个包含 15-20 个 QUERY 公式的 Google Sheets 模型迁移到 Excel,转换工作本身并不复杂,但相当繁琐:每个公式都需要分解为基础操作,列选择逻辑要用 CHOOSE 数组重写,GROUP BY 逻辑要拆分为 UNIQUE + SUMIFS 组合。

ModelMonkey 可以在电子表格内直接完成这一过程--描述你在 Google Sheets 中使用的 QUERY 逻辑,它会根据你的实际数据布局和标签页结构,几分钟内生成对应的 FILTER/SORT/UNIQUE 写法,而同等工作量由资深分析师手工处理通常需要 2-3 小时。查看 ModelMonkey 方案,Google Sheets 和 Excel 均支持。