欢迎转发和点一下“在看”,文末留言互动!
置顶公众号或设为星标及时接收更新不迷路
小伙伴们好,今天来和大家分享一道文本查找的题目。题目稍有复杂,但也是日常工作中常见的题目类型。学会了今天的逻辑思路后,今后处理同类型的题目将会轻松很多。
原题目是这样的:
同时存在于所有列中,即每一列中都有该数据。这个题目可以用COUNTIF函数来解决。且慢,观察一下源数据,B列中有一个重复值“深圳”,这个这解题过程中需要特别注意!
01
COUNTIF函数组合
在单元格H2中输入下列公式,三键确认后向下拖曳即可。
=INDEX(A$2:A$6,SMALL(IF(MMULT(SIGN(COUNTIF(OFFSET(A$2:A$6,,COLUMN($A:$C)),A$2:A$6)),ROW($1:$3)^0)=3,ROW(A$2:A$6)-1),ROW(A1)))
下面来详细解析一下这条公式。
OFFSET(A$2:A$6,,COLUMN($A:$C))
既然要查询每一列,我们就利用OFFSET函数首先构建一个5行3列的内存数组。
COUNTIF(OFFSET(A$2:A$6,,COLUMN($A:$C)),A$2:A$6)
利用COUNTIF函数对A$2:A$6中的数据统计其在这个内存数组中的个数。这部分返回的结果是{1,1,1;0,0,0;1,1,1;2,1,1;0,0,0}。
注意上面的结果中有一个“2”,它对应的是“深圳”。
SIGN(COUNTIF(OFFSET(A$2:A$6,,COLUMN($A:$C)),A$2:A$6))
这时候还不能使用MMULT函数,原因同上,有重复值。先用SIGN函数将所有的非零正数都转换为“1”,方便后面MMULT函数来计算在这个内存数组中每行上的总和是不是3。
MMULT(SIGN(COUNTIF(OFFSET(A$2:A$6,,COLUMN($A:$C)),A$2:A$6)),ROW($1:$3)^0)
MMULT函数矩阵求和。如果一个数据在每列中都有出现,那么行求和的结果一定等于3。
同时这也是为什么先要把重复的“深圳”处理一下的原因。
IF(MMULT(SIGN(COUNTIF(OFFSET(A$2:A$6,,COLUMN($A:$C)),A$2:A$6)),ROW($1:$3)^0)=3,ROW(A$2:A$6)-1)
IF函数条件判断,这个很简单,不用赘述。
INDEX(A$2:A$6,SMALL(IF(MMULT(SIGN(COUNTIF(OFFSET(A$2:A$6,,COLUMN($A:$C)),A$2:A$6)),ROW($1:$3)^0)=3,ROW(A$2:A$6)-1),ROW(A1)))
利用INDEX函数返回正确答案即可。
本期内容练习文件提取方式:
链接: https://pan.baidu.com/s/1Ywlobhrc7ghJ6NDgyIfVgw?pwd=tsiu 提取码: tsiu
-END-
长按下方二维码关注EXCEL应用之家
面对EXCEL操作问题时不再迷茫无助
我就知道你“在看”