不用VBA!用Excel 365新函数,1个公式无限递归反查BOM全部上级,高级Excel玩法!



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