掐头去尾:计算相同内容之间的最大间隔数
1.计算张三之间的最大间隔数
在没有见过海鲜老师的思路前,我的思路是先判断这些姓名是否等于张三,如果等于张三,返回对应的行号,否则返回false。然后用下一个行号减去上一个行号,最后用max取最大值,再减去1,就得到了最大间隔数。公式如下,按ctrl+shift+enter三键。
=MAX(MMULT(IFERROR(SMALL(IF(A2:A15="张三",ROW(2:15)),ROW(1:15)+{0,1}),),{-1;1}))-1
=LARGE(FREQUENCY(ROW(A:A),(A2:A15="张三")*ROW(20:33)),3)-1
下面我来给大家拆解下这个公式:
这里有些小伙伴可能会有疑问,为什么要用row(20:33)呢?其实这是有道理的。第一,它和数据源的尺寸大小是一样的,都是14行。第二,row开头的数字20大于数据源的个数14。为什么要求第二点,后面再解释。
(A2:A15="张三")*ROW(20:33)这一步的结果作为frequency的第2参数,也就是区间分段数组。frequency的第1参数是row(a:a),是一个非常庞大的数组,也就是excel表格的所有行数组成的数组,从1,2,···一直到1048576。
从上图的对比中,我们可以看出5是我们所要的结果,只不过包含了张三本身,所以还要减去1。那怎么把5取出来呢?可以用large从上面的结果中取第3个最大值。
因为开头的21和结尾的1048545都比数据源的个数14大,所以要把它们两个排除出去,这就是“掐头去尾”。这也是为什么row的开始数字必须要大于数据源的个数,只有这样才能把头去掉。
今天的分享就到这里,如果你还有其他的方法,欢迎留言分享讨论。
https://pan.baidu.com/s/1J-VCtOjlUAaTBPT9s037Yw