🧮 WPS 递归 | 批量生成工资条 :LET+LAMBDA 完整全解析!!!
财务打工人天天头疼的需求来了!原始表格一行一条员工数据,需要自动批量生成独立工资条:每一条数据上方自带表头、自带序号、员工数据行、下方空行分隔,全部动态数组一键溢出生成,不用复制粘贴、不用辅助列、纯原生递归函数直接搞定!
今天完整开源整套公式,从案例背景、公式源码、逐行语法拆解、对应流程图原理、纯函数语句版极简递归调用 + 回溯全过程、亮点总结全部讲透,全程用原函数语句讲解,新手也能一眼看懂递归逻辑。
📌 案例背景
数据源区域:B5:H9
B4:H4 为原始工资条表头(工号、姓名、性别、底薪、补贴、加班、总计)
B5:H9 为每一行 1 条的员工完整薪资数据
需求:
自动批量生成格式统一的独立工资条,格式固定:
序号 → 表头行 → 员工数据行 → 空行
所有工资条依次垂直堆叠、自动整列溢出生成,和表格 K 列最终效果 100% 匹配。
🧩 完整公式源码(你原版完整公式,格式化排版版)
excel
=LET(
拼接,LAMBDA(x,y,z,
IFNA(HSTACK(z,VSTACK(y,TAKE(x,1))),"")),
TT,LAMBDA(a,b,c,
IF(ROWS(a)=1,拼接(a,b,c),
VSTACK(EXPAND(拼接(a,b,c),3,,""),TT(DROP(a,1),b,c+1)))),
TT(B5:H9,B4:H4,1))
流程图相对理解更加完全一些!!
🧩 公式逐行语法全拆解
完全分层拆解每一个自定义函数、参数、每一层 IF 判断,对应你给的流程图每一个模块
1. 第一层:自定义「单条工资条拼接函数」拼接
excel
拼接,LAMBDA(x,y,z,IFNA(HSTACK(z,VSTACK(y,TAKE(x,1))),""))
3 个参数含义:
x:当前单行员工数据
y:原始表头区域
z:当前工资条序号
函数内部逻辑:
TAKE(x,1):提取当前这 1 行员工完整数据
VSTACK(y,TAKE(x,1)):垂直堆叠 → 【表头行】在上,【员工数据行】在下
HSTACK(z, 堆叠结果):水平拼接,把序号放在整行最左侧
IFNA(,""):异常容错,空白报错自动屏蔽
作用:输入 1 个员工、1 个表头、1 个序号,直接生成 1 套完整工资条主体
2. 第二层:主递归循环函数 TT(a,b,c)
三参数递归主函数,完美对应你流程图全流程
3 个固定传参:
a:当前剩余待处理的全部员工数据数组
b:固定不变的全局表头(全程不变化)
c:全局序号计数器(从 1 开始,每处理完 1 个员工自动 + 1)
第一层 IF 判断(流程图菱形判断框 【终极递归终止条件】)
excel
IF(ROWS(a)=1, 拼接(a,b,c), ...)
判断逻辑:当前剩余待处理数据的行数 = 1
含义:已经处理到最后 1 个员工数据了,所有遍历即将结束
条件成立(是):直接调用拼接(a,b,c),生成最后一条工资条,递归到此彻底终止,不再自身调用,对应流程图「是→拼接 (a,b,c)」分支。
条件不成立(否):递归循环主体(对应流程图否分支)
excel
VSTACK(EXPAND(拼接(a,b,c),3,,""),TT(DROP(a,1),b,c+1))
拼接(a,b,c):先生成当前这 1 个员工的完整工资条主体
EXPAND(...,3,,""):把当前工资条整体向下扩展 3 行高度,自动补齐下方空行分隔,实现工资条之间自动留白隔开
DROP(a,1):砍掉已经处理完的当前第 1 行员工数据,剩下所有未处理员工数据
TT(DROP(a,1),b,c+1):递归调用自身,剩余数据、固定表头、序号 + 1,进入下一轮循环
VSTACK:把【当前完整工资条】和【后续所有员工递归出来的全部工资条】上下垂直堆叠,全部结果纵向合并溢出。
3. 末尾初始调用
excel
TT(B5:H9,B4:H4,1)
传入初始 3 个参数,启动整个递归:
全部员工原始数据 a=B5:H9
固定表头 b=B4:H4
起始序号 c=1
📝 对应流程图・递归调用全过程
全程严格使用原函数参数、原函数语句、原调用写法,每一步只写【函数调用 + 条件判断 + 执行动作 + 回溯】,新手顺着函数就能看懂,步骤精简无废话,完美对应你给的递归流程图。
第 1 层调用
TT(B5:H9, B4:H4, 1)
判断:ROWS(a)=1? 总行数 5 行≠1,不满足终止条件(流程图否分支)
执行:先生成当前工资条主体 拼接(a,b,1) → 1 号工资条(序号 1 + 表头 + 第 1 个员工数据)
EXPAND(...,3,,"") 扩展 3 行,补齐下方分隔空行
剩余数据处理:DROP(a,1) 砍掉第 1 行已处理员工,剩余 4 行员工数据
递归自身调用:TT(剩余4行数据, B4:H4, c=2)
VSTACK堆叠:【1 号完整工资条】 + 后续全部递归结果
第 2 层调用
TT(剩余4行员工数据, B4:H4, 2)
判断:ROWS(a)=1? 4 行≠1,不满足终止条件(流程图否分支)
执行:生成当前工资条主体 拼接(a,b,2) → 2 号工资条(序号 2 + 表头 + 第 2 个员工数据)
EXPAND(...,3,,"") 扩展补齐分隔空行
剩余数据处理:DROP(a,1) 砍掉本行数据,剩余 3 行员工数据
递归自身调用:TT(剩余3行数据, B4:H4, c=3)
VSTACK堆叠:追加【2 号完整工资条】到整体结果
第 3 层调用
TT(剩余3行员工数据, B4:H4, 3)
判断:ROWS(a)=1? 3 行≠1,不满足终止条件(流程图否分支)
执行:生成当前工资条主体 拼接(a,b,3) → 3 号工资条
EXPAND扩展补齐分隔空行
DROP(a,1) 砍掉本行,剩余 2 行数据
递归自身调用:TT(剩余2行数据, B4:H4, c=4)
VSTACK堆叠追加结果
第 4 层调用
TT(剩余2行员工数据, B4:H4, 4)
判断:ROWS(a)=1? 2 行≠1,不满足终止条件(流程图否分支)
执行:生成当前工资条主体 拼接(a,b,4) → 4 号工资条
EXPAND扩展补齐分隔空行
DROP(a,1) 砍掉本行,剩余最后 1 行员工数据
递归自身调用:TT(剩余1行数据, B4:H4, c=5)
第 5 层调用(递归终极终止层,流程图是分支)
TT(仅剩最后1行员工数据, B4:H4, 5)
判断:ROWS(a)=1? 条件成立!满足终止条件
不再递归调用自身,直接执行 拼接(a,b,5) 生成最后第 5 号工资条
把最后一条结果向上回溯,全部VSTACK完整拼接
最终完整溢出结果
所有工资条从上到下依次完整堆叠,格式全部统一:序号+表头+员工数据+空行,和你表格 K 列展示效果 100% 完全匹配!
⚖️ 公式核心亮点 & 干货总结
和之前所有帖子统一总结模块,保持账号发文风格统一
全自动批量生成,零人工操作
原始数据改多少行、多少列,公式完全不用改,自动遍历全部员工,每一条都自带序号、表头、数据、分隔空行。
原生动态数组溢出
只需要在单元格输入1 个完整公式,全部工资条自动整列溢出生成,全程不用下拉填充、不用复制粘贴、无任何辅助列。
递归结构完美闭环,完全对应流程图
严格遵循递归三大核心:
固定终止条件:剩余仅 1 行数据,停止递归
固定循环处理:处理当前行 → 砍掉已处理数据 → 序号自增 → 剩余数据递归
固定结果堆叠:VSTACK全程把所有工资条上下完整拼接
格式高度自定义
工资条间隔行数、表头内容、序号规则全部可以微调,只需要修改EXPAND函数里的扩展行数即可。
全原生函数兼容
仅使用 LET/LAMBDA/HSTACK/VSTACK/TAKE/DROP/EXPAND 原生现代数组函数,WPS 最新版、Microsoft 365 Excel 全部通用,无插件、无 VBA、无宏。
💡 递归底层通用复盘
结合之前库位编码、分段求和所有案例,统一递归底层规律:所有LET+LAMBDA递归,万变不离其宗的骨架:传参初始化 → 判断终止条件 → 处理当前片段 → 切割剩余数据 → 参数更新自身递归 → 全部结果堆叠合并这个工资条公式把这套递归逻辑用到了办公高频场景,实用性直接拉满。
📢 结尾互动
财务打工人狂喜!一键批量生成独立工资条的递归公式!不用复制、不用排版、不用辅助列,原始数据表一放,全部工资条自动生成!需要全套公式源文件、还有其他办公表格批量公式的朋友,评论区留言!
