488·LAMBDA遍历二维表

标签:
lambda二维表遍历 |
分类: 公式技巧 |
看到本文的朋友,我假定您已读过:
《LAMBDA帮助FILTER突破数组限制》
在上一篇文章当中,在A列中寻找有过三种履历的数据。
公式中,LET首先定义了一个自定义函数【名称】“履历”。
紧接着LAMBDA为这个函数,定义了参数“Y”和函数的计算过程。
函数“履历”就是在计算三种履历中的某一种,是否在A列出现过。
比如,给定Y=0,就是在计算A列数据是否有“公务员履历”。
给定Y=-1,就是在计算A列数据是否有“大学履历”。
给定Y=-2,则是在计算A列数据是否有“军人履历”。
之后,LET又定义了一个自定义函数【名称】“全履历”。
“全履历”由LAMBDA指定参数“Y”并给出了计算过程:
IF(y=-2,履历(y),履历(y)+全履历(y-1)))
这是个递归计算,可以遍历了列方向的单元格。
最后输出结果“全履历(0)”。
计算出三履历中,出现了几个。
这个公式向下复制,
结果是2,表示有过2种履历。
结果是3,表示有过3种履历。
公式向下复制过种中,COUNTIF(A2……
不断变为A3,A4,A5……
这也是一个变量。
如果问题进一步升级。
我想知道A列35个数据中,3种履历的共有多少?
那就需要将A2这个行方向上的变量,定义成未知数“X”。
而且还需要再定义一个【名称】,如“全履历和”,
以遍历行方向的35个数据。
公式中,将COUNTIF(A2……,换成了变量:
COUNTIF(INDEX($A$1:$A$35,X)
自定义函数“履历(Y)”和“全履历(Y)”,
都变成了双参数函数“履历(X,Y)”和“全履历(X,Y)”
新定义的【名称】“全履历和(X,Y)”,
是对“全履历(X,Y)”等于3,也就是三个履历的记录计数。
SUM((全履历(x,y)=3)*1)
这里面“全履历(x,y)=3”,
两个未知数,分别实现了遍历表格的行字段和列字段。