网友提问:有多行多列的数据,要查找每行中有没有三个相连的数字,注:0=0,0也=10,如有:0125,0849,0179,这都是有三连数的,如果存在用1表示不存在用0表示,要用什么公式?
我给的参考:=OR(MMULT(COUNTIF(A2:D2,TRANSPOSE(A2:D2) {1,-1,9,-9}),{1;1;1;1})=2)*1
公式原理:
① =TRANSPOSE(A2:D2) {1,-1,9,-9},这一步得到A2:D2这个区域里的4个数,分别加上1、减去1、加上9、减去9,得到的一个二维数组
② =COUNTIF(A2:D2,TRANSPOSE(A2:D2) {1,-1,9,-9}),这一步是在A2:D2区域中统计刚刚得到的数组里面各元素的个数,得到的结果如下
此时有个逻辑,如果区域存在三连数例如1、2、3,那么它们的中位数2,它加上1和减去1也必然在该区域中存在,那么上面这个二组数组中某行必然存在一行有2个1才符合条件。此时可以用mmult函数将每行进行求和
③ =MMULT(COUNTIF(A2:D2,TRANSPOSE(A2:D2) {1,-1,9,-9}),{1;1;1;1}),这一步得到对上面数组每一行进行求和后的结果
④ 后面就很简单了,只要判断上面数组中有一个数=2,那么就是存在三连数,否则就是不存在,用OR函数即可,最后用*1转换为1和0
=OR(MMULT(COUNTIF(A2:D2,TRANSPOSE(A2:D2) {1,-1,9,-9}),{1;1;1;1})=2)*1
评论 (0)