很多会计把 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 批量提取分隔符之后的文本 提取明细科目名称、提取凭证号后缀

补充说明

  1. 配套传统函数:SUM、IF、IFERROR、IFS、SWITCH、SUMIFS、COUNTIFS、INDEX 等传统函数原生支持数组运算,可与上述函数自由组合,是日常使用的重要补充,但不属于函数式编程专属函数。
  2. 版本覆盖:FILTER/UNIQUE/SORT/SEQUENCE/LET/XLOOKUP 等基础动态数组函数 Excel 2021 及以上版本支持;MAP/BYROW/SCAN/REDUCE/MAKEARRAY 等高阶迭代函数 Excel 2024 及以上版本支持。
  3. WPS 支持:所有专属函数在最新版 WPS 中均可应用。
  4. 学习优先级:优先掌握第一类 + 第四类(动态数组基础 + 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 个专属函数里,你真正高频用的可能就十来个;先吃下动态数组基础那一桌,回头看那些"下拉填充一下午"的表,会发现自己曾经很辛苦。

— 虑得先生

本文为「虑得企服」财务数字化系列之一。若你团队在报表自动化、批量取数、公式工程化上投入了大量重复人工,虑得企服可提供共享财务总监式的外脑支持,把重复活交给公式。