excel学习库

excel表格_excel函数公式大全_execl从入门到精通

关于在Excel查找值的另一个案例

之前给朋友们讲解了下面这个excel里面如何使用学号查询到学生的信息。使用的是vlookup函数。今天继续讲解如何通过其他函数实现查询学生所在指导小组的其他成员。

我们先回顾下数据结构,原始数据存储在下图表格中,B列为学号,C列为姓名,指导老师在H列。那么如何查找学生所在指导小组的其他成员呢。

首先整理下思路:

我们需要找到的是当前这个学生对应指导老师指导的其他学生。这个学生不止一人,所以直接用vlookup或者match函数是没法找到的,因为他们都是根据条件返回一个值。

那怎么办呢?前面我们有讲解index函数,看起来是有可能在这边使用的。现在,问题变成了,我们怎么样能把符合条件的数据和其他不符合条件的数据分开。

这里介绍一个单元格相乘的方法,比如如下图所示,我们将左边第一列乘以左边第二列,得到了第三列的值:可以看到,如果真值*真值,结果为真(1),否则其他值相乘都是假(0)。

这个有什么用呢,可以看到,我们的条件是指导老师等于指定指导老师,但姓名不等于当前学生的所有成员。刚好可以用这个乘法来将所有符合条件的人找出来。

进一步的,我们想把符合的对应的行号也算出来,不符合的人直接让他变成FALSE。

那么可以用row函数来计算行号,比如上图的第一个1,在第四行,其实是等于row(当前单元格)-row(第一个单元格)+1 ,也就是 4-1+1 = 4。我们通过判断只有真值的情况下才求行号,其他值的场景都显示为FALSE就行了。公式为:

=IF(R15,ROW(R15)-ROW($R$15)+1)

这样我们就初步构造了一个数组,如下图所示:

这时候,只要用small函数依次获取第一个,第二个值,... 第n个值,就能把所有符合条件的数据找出来。

因此,可以把这个公式扩充为:

=IFERROR(INDEX('2 查询数据'!H:H, SMALL(IF(('2 查询数据'!H:H='2 查询结果'!$F$7)*('2 查询数据'!C:C<>'2 查询结果'!$A$7), ROW('2 查询数据'!C:C)-ROW('2 查询数据'!C$1)+1), ROW(6:6))),"")

这就是最后的公式,我们把公式依次填写到每个要获取值的单元格,并填充到所有的绿色区域。这样子就能自动出来符合条件的所有其他学生信息了。

这个公式利用了上文描述的原理,稍微再追加讲解下:

1. 为什么在small函数里面small(用if函数构造的数组,row(1:1))为啥第二个参数用row(1:1),其值其实是 1,是因为希望我们再下拉运用公式到后续行的时候,可以自动变成row(2:2),值为2...row(n:n),值为n,从而依次得到我们想要的第N小的这个N值。

2. iferror函数是干什么的。因为我们预先先把公式运用到单元格里面,那如果当前行已经是第n+1行了,那肯定查不到第n+1小的数字,这时候就得把结果转换为"",保持界面简洁好看。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接