发布日期:2025-04-12 12:15 点击次数:199
图片
继续介绍列表数据处理。
在Excel中,如果我们需要列出列表中满足条件的记录,可以使用FILTER函数,比如:
=FILTER(A2:A6,A2:A6<>"b")
筛选的就是第一列数据中不等于b的那些元素。
这个函数提供了很大的便利。但是有一点麻烦的地方,那就是我们必须了解需要筛选的结构,因为在定义条件时你必须知道是对哪个具体区域定义的,也就是说,在第二个参数追踪必须包含完整的条件区域,比如,
A2:A6<>"b"
在实际工作中场景中,我们运用筛选时,可能未必对其中数据的内部框架结构了解得那么清楚。因此,在定义条件时,我们更愿意不去涉及具体区域。
上面的筛选需求,如果要使用文字描述的话,我们可以这么说:
筛选区域中那些不等于“b”的元素。
这里,我们使用那些代表需要设置条件的区域,这就规避了对区域的引用。
实际上,在Power Query的M语言中,就有一个LIST.SELECT函数,使用的就是类似的方案。
我们今天就在Excel中实现这个功能。
简单方案我们的方案相当简单,使用一个自定义函数表示筛选条件:
select_func(x)
这里的x就是我们在上文中的“那些”,然后循环检查待筛选列表中的每一个元素,如果符合返回true,否则,返回false。
这样我们就可以得到一个逻辑值数组。
用这个数组对列表进行筛选即可。
实现代码很简单:
/** 选取满足条件的元素*/myFilter = LAMBDA(list, select_func, LET( cond, MAP(list, LAMBDA( a, select_func(a) )), FILTER(list, cond) )这里,我们使用了MAP函数对列表进行循环。调用示例
下面是一个调用的例子
=myFilter(A2:A6, LAMBDA(x, x <> "b"))
图片
使用多个条件,
=myFilter(A2:A6, LAMBDA(x, AND(x <> "b", x <>"a")))讨论
现在的实现方案中,我们使用MAP函数循环列表数据。
这就导致这个筛选函数只能用于单列数据。如果有多列数据,就不能满足我们的期望。
此时,就需要使用其他循环函数了。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。