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

E精精
E精精 WPS资深用户KVPWPS函数专家Lv.2 潜力创作者

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))

这个部分就是递归,所谓递归就是自己调用自己,一般来说递归,我们要搞清楚什么时候退出,下次执行和本次执行直接的逻辑关系,基本就可以了,千万不要细想,可以先用少量的数据模拟!

我觉得目前最好理解的就是座号报号的案例!

第一排的人都知道自己的初始号,现在你坐在最后一排,你想知道自己的,编号,你就问前面一位同学,前面同学也不知道,就继续往前问,直到问到第一排同学(出口,有解的人),第二位同学,知道第一排同学的编号是10,那么他就是11,依次往后传,最后你就是知道知己的编号了!这里,第一位同学知道自己的编号,也就是函数有解,是出口,第二是递推关系,这里是编号+1,还有一点,就是递归会让问题规模不断变小,这个你或许也发现了!

递归难的是寻找出口和递推关系!

我们的案例是 当前查询内容->后续查询内容

不要总是想在大脑中把递归全部列出,递归本质很简单,就是出口和递推关系,不用细想!

比如一个简单的求和,1~n的和=1 加上 1到n-1的和,这就是他们的递推关系!

递归对新手来说确实困难,但是你如果学会了,你就会觉得真玩意真的非常简洁!

今天的内容就到这里,希望对你学习递归有所帮助!

更多函数等办公自动化教程,欢迎加入我们的知识库,迭代更新~

递归好用
理解不了,不好用!
6 (50%)
非常好用
8 (50%)
14人参与 截止时间:2026/09/30 06:50:43
Excel全栈知识库-E精精
@E精精
江苏省
浏览 245
收藏
10
分享
10 +1
1
+1
全部评论 1
 
赵二
赵二 Lv.2 潜力创作者WPS产品体验官

Lv.2潜力创作者

高级!
·
2
回复