很多会计把 Excel 当"电子算盘"——拉辅助列、下拉填充、复制去重、插透视表。这些动作每天重复几十次,本质是用手工模拟"批量计算"。而 Excel 函数式编程,就是把这批动作交给公式引擎一次性完成:写一个表达式,整张表自动溢出结果,数据一变结果就跟着变。
函数式编程的专属函数约 35 个,按功能分 6 大类。它们区别于传统单元格公式,专门用于数组批量处理、高阶迭代和结构化编程。如果算上支持数组运算的传统配套函数(SUM、IF、SUMIFS 等),可用函数超过 60 个,但核心的函数式能力都由下面这 6 类提供。最新版 WPS 同样支持这套专属函数。
下面按类别逐一列出,每个函数都配一个会计典型场景——你可以直接对照自己的日常活,看哪一类先上手。
一、基础动态数组核心函数(8个)
函数式编程的入门底座,全部支持自动溢出,直接替代传统的下拉填充、手工筛选、复制去重。
| 函数 | 核心作用 | 会计典型场景 |
|---|---|---|
FILTER |
按自定义条件筛选数组,返回符合条件的整行/整列 | 按科目、部门、日期范围筛选凭证明细 |
UNIQUE |
对数组去重,返回所有不重复值 | 生成科目清单、部门清单、客户供应商清单 |
SORT |
按指定列对数组排序 | 凭证按金额排序、科目按编码排序 |
SORTBY |
按多维度、多条件对数组排序 | 先按部门升序、再按金额降序排列凭证 |
SEQUENCE |
生成连续的数字、日期、编号序列 | 生成会计期间序列、凭证号序列、日期序列 |
RANDARRAY |
生成指定范围的随机数数组 | 生成随机抽样数据、测试用例数据 |
XLOOKUP |
支持数组批量查找,一次返回多列结果 | 给凭证明细批量匹配科目属性、往来单位信息 |
XMATCH |
批量查找值的位置,支持数组返回 | 匹配科目在列表中的序号、实现自定义顺序排序 |
二、数组重塑与操作函数(12个)
专门用来改变数据的行列结构,替代手工复制粘贴、转置、拆分表格,是组合复杂公式的结构基础。
| 函数 | 核心作用 | 会计典型场景 |
|---|---|---|
VSTACK |
垂直上下合并多个数组 | 合并多月凭证明细、合并多部门报表 |
HSTACK |
水平左右合并多个数组 | 给表格追加计算列、拼接多组指标 |
TOROW |
二维数组转为一维行 | 多列数据转为单行清单 |
TOCOL |
二维数组转为一维列 | 借贷两列金额转为一维金额列、多列费用转为一列 |
WRAPROWS |
一维数据按行重塑为二维 | 清单转多行多列的报表排版 |
WRAPCOLS |
一维数据按列重塑为二维 | 长列表转为多列打印格式 |
EXPAND |
将数组扩展填充到指定行列数 | 补全报表的缺失行/列、填充默认值 |
TAKE |
提取数组的前N行/前N列 | 提取排名前10的科目、提取最新10条凭证 |
DROP |
删除数组的前N行/前N列 | 去掉表头、去掉合计行 |
CHOOSEROWS |
选择数组中指定的行 | 提取指定行号的凭证 |
CHOOSECOLS |
选择数组中指定的列 | 从全表中只提取需要的几列数据 |
TRANSPOSE |
数组行列转置 | 横向报表转纵向、维度转置 |
三、LAMBDA 高阶迭代函数(6个)
函数式编程的核心能力,配合 LAMBDA 实现循环迭代逻辑,替代 VBA 的循环功能,无需启用宏即可实现批量逐行、累计计算。
| 函数 | 核心作用 | 会计典型场景 |
|---|---|---|
MAP |
逐元素映射转换,对数组每个元素执行相同逻辑 | 批量计算税额、批量计算折旧额 |
BYROW |
按行迭代,每行返回一个计算结果 | 每行计算借贷合计、每行判断账龄区间 |
BYCOL |
按列迭代,每列返回一个计算结果 | 每月计算发生额合计、每列计算最大值 |
SCAN |
累计迭代,返回每一步的中间结果 | 银行存款逐日结存、科目累计发生额、个税累计预扣 |
REDUCE |
聚合迭代,最终返回一个聚合结果 | 多表汇总、多条件叠加聚合、长字符串拼接 |
MAKEARRAY |
按自定义规则生成指定大小的二维数组 | 生成自定义结构的报表模板、计算矩阵 |
四、结构化编程与自定义函数(3个)
实现公式的工程化、结构化与复用,是从"写公式"到"做功能"的升级。
| 函数 | 核心作用 | 会计典型场景 |
|---|---|---|
LET |
公式内定义变量,给中间结果命名,分步计算 | 重构复杂税负率、毛利率公式,提升可读性与性能 |
LAMBDA |
定义可传参的自定义函数,一次定义全工作簿调用 | 封装个税计算、账龄判断、税额计算等通用逻辑 |
ISOMITTED |
判断自定义函数的可选参数是否被传入 | 制作带默认参数的自定义函数,比如默认按本币计算 |
五、函数式数据透视函数(2个)
公式级别的数据透视,无需手动插入透视表,数据更新自动刷新。
注意:
GROUPBY和PIVOTBY目前优先在 Office 365 中提供,Excel 2024 单机版需更新到最新版本才可使用;若不可用,可用LET + SUMIFS组合实现同等效果。
| 函数 | 核心作用 | 会计典型场景 |
|---|---|---|
GROUPBY |
按指定维度分组聚合,支持多维度、多聚合方式 | 按科目+部门汇总费用、按月份汇总税金 |
PIVOTBY |
按行、列双维度生成透视表 | 生成部门×费用类别的二维费用汇总表 |
六、数组文本处理函数(4个)
支持数组级别的文本批量处理,替代手工分列、批量替换。
| 函数 | 核心作用 | 会计典型场景 |
|---|---|---|
TEXTSPLIT |
批量按分隔符拆分文本为数组 | 拆分科目编码、拆分摘要关键词 |
TEXTJOIN |
批量将数组合并为文本 | 合并多科目名称、生成凭证摘要 |
TEXTBEFORE |
批量提取分隔符之前的文本 | 提取科目编码的一级科目位、提取供应商简称 |
TEXTAFTER |
批量提取分隔符之后的文本 | 提取明细科目名称、提取凭证号后缀 |
补充说明
- 配套传统函数:
SUM、IF、IFERROR、IFS、SWITCH、SUMIFS、COUNTIFS、INDEX等传统函数原生支持数组运算,可与上述函数自由组合,是日常使用的重要补充,但不属于函数式编程专属函数。 - 版本覆盖:
FILTER/UNIQUE/SORT/SEQUENCE/LET/XLOOKUP等基础动态数组函数 Excel 2021 及以上版本支持;MAP/BYROW/SCAN/REDUCE/MAKEARRAY等高阶迭代函数 Excel 2024 及以上版本支持。 - WPS 支持:所有专属函数在最新版 WPS 中均可应用。
- 学习优先级:优先掌握第一类 + 第四类(动态数组基础 + LET),可解决 80% 的日常批量计算问题;再学第二类数组重塑;最后攻克第三类高阶迭代与自定义函数。
常见问题(FAQ)
Q1:这 35 个专属函数和传统公式有什么本质区别? 传统公式是"一格算一格",结果靠下拉填充复制到整列;专属函数是"一次写、整片溢出"——以数组为处理单位,公式自动把结果铺满对应区域,源数据变动结果实时刷新,不留下拉痕迹、不怕漏拉行。
Q2:我的 Excel 版本够用吗? 基础 8 个(FILTER/UNIQUE/SORT/SEQUENCE/LET/XLOOKUP 等)Excel 2021 起就支持;高阶迭代(MAP/BYROW/SCAN/REDUCE/MAKEARRAY)要 Excel 2024 及以上。最新版 WPS 全支持。如果还没用上动态数组,建议先升级——这是函数式编程的地基。
Q3:学习顺序怎么排最省力? 先攻第一类(动态数组基础)和第四类(LET),这两类能解决 80% 日常批量计算;再学第二类(数组重塑)做结构变换;最后上第三类(LAMBDA 高阶迭代)和第五、六类。不要一上来死磕 REDUCE,容易劝退。
Q4:不会 VBA,也能做复杂逻辑吗? 能。第三类高阶迭代函数 + LAMBDA,本质就是用公式写循环和自定义函数,无需启用宏、无需碰 VBA 代码。封装好的 LAMBDA 还能全工作簿复用,等于给 Excel 加了你自己的"财务函数库"。
结语
函数式编程不是把 Excel 变得更"程序员的",恰恰相反——它是把会计每天都在做的批量活,从手工模拟变成公式自动完成。35 个专属函数里,你真正高频用的可能就十来个;先吃下动态数组基础那一桌,回头看那些"下拉填充一下午"的表,会发现自己曾经很辛苦。
— 虑得先生
本文为「虑得企服」财务数字化系列之一。若你团队在报表自动化、批量取数、公式工程化上投入了大量重复人工,虑得企服可提供共享财务总监式的外脑支持,把重复活交给公式。