不用VBA!用Excel 365新函数,1个公式无限递归反查BOM全部上级,高级玩法!
- 2026-11-01 21:46:37
不用VBA!用Excel 365新函数,1个公式无限递归反查BOM全部上级,高级玩法!大家好,我是E精精! 简单我们来分享一个简单的Excel365函数递归案例,希望对大家学习递归有点帮助! ▍需求说明 这个在生成制作企业非常常见,一个成品设计的材料特别的,不同的材料还有子材料构成,这也是所谓的BOM(物料清单),一般为了方便查询!也是因为他们是"父子关系"结构 今天我们的需求就是要根据子项,方向查询出全部母项,并用"->"呈现! 具体如下面示意图! 
▍需求分析 材料直接都是“父子关系”,一个材料是另个材料的母项,也可能是另外一个材料的子项,他们的相对关系通过两列列出! 比如我们查询A1,第一次拿到对应的母项 A,但是A不一定是最终的母项,如何判断是否是最终的母项呢?,就是在A列中,不会再出现,对应的也就是说没有对应的B列母项! 所以我们需要不断的重复第一次从查找过程,直到,A列中查找不到依次拼接好返回,这个是不是就有了递归的影子! 
下面是大概的白话公式: 下面我们把上面的说法翻译函数公式! ▍函数实现 
上面就是按前面的思路实现的,核心部分就是S对应的XLOOKUP函数 IF判断为空就直接返回查询的值,这个前面用最后的成品举例说明过,非常好理解,没有母项的,肯定就是最后的层级了! 这个部分就是递归,所谓递归就是自己调用自己,一般来说递归,我们要搞清楚什么时候退出,下次执行和本次执行直接的逻辑关系,基本就可以了,千万不要细想,可以先用少量的数据模拟! 我觉得目前最好理解的就是座号报号的案例! 不要总是想在大脑中把递归全部列出,递归本质很简单,就是出口和递推关系,不用细想! 
递归对新手来说确实困难,但是你如果学会了,你就会觉得真玩意真的非常简洁! 今天的内容就到这里,希望对你学习递归有所帮助!


f = XLOOKUP(查询内容,A列,B列,"") 在A列查询对应的B列,查询不到就返回空,查询出来的记录,我们要继续重复上面的查询,直到返回值为空,比如最后一个成品,再次在A列中已经查询不到,就返回这个成品递归的中间过程如何处理呢?我们需要用当前查询的值-> 后面每查询返回的值!

=LET(f,LAMBDA(f,x,LET(S,XLOOKUP(x, A:A, B:B, ""),IF(S = "", x, x & "->" & f(f, S)))),f(f,E2))
IF(S = "", x, x & "->" & f(f, S))第一排的人都知道自己的初始号,现在你坐在最后一排,你想知道自己的,编号,你就问前面一位同学,前面同学也不知道,就继续往前问,直到问到第一排同学(出口,有解的人),第二位同学,知道第一排同学的编号是10,那么他就是11,依次往后传,最后你就是知道知己的编号了!这里,第一位同学知道自己的编号,也就是函数有解,是出口,第二是递推关系,这里是编号+1,还有一点,就是递归会让问题规模不断变小,这个你或许也发现了!
递归难的是寻找出口和递推关系!
我们的案例是 当前查询内容->后续查询内容
比如一个简单的求和,1~n的和=1 加上 1到n-1的和,这就是他们的递推关系!

本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:wyl860211@qq.com 。