
大家好,我是Excel归故乡,上一期我们详细解析了数组之间的运算规则,本期我们用两个小案例来加深一下对数组的印象,也带大家感受一下数组的作用。
案例①:计算下面两门学科都达到90分以上的有多少位同学。

拿到这个案例,我们使用最基础的SUM函数结合数组来完成。
第一步:我们需要判断分数是否大于90分,这里可以采用比较符号”>”直接得到,我们增加两个辅助列来分别判断语文和数学是否大于90分。在D3和E3单元格输入:=B3>90,=C3>90,向下填充,此时得到的比较符的结果TRUE和FALSE,TRUE代表比较结果为成立,说明分数是大于90分,FALSE则是不成立。我们可以看到图中我标绿色的单元对应的分数,则是大于90分的。

但是,现在我们只是分别判断出了每一个分数是否大于90分,要如何进一步判断两门课程都大于90分呢?此时,我们就要联想到本章第三节讲解到的内容,TRUE可以当成1,FALSE可以当成0。利用这个原理,我们可以用同一个同学的分数比较结果来做乘法运算。下面拿两位同学做一个分析:
第一位同学点点,他的语文成绩61分小于90分,比较结果是FALSE;数学成绩94分大于90分,比较结果是TRUE,用这两个结果直接相乘,相当于0*1,其结果为0
第二位同学蓉蓉,她的语文成绩98分大于90分,比较结果为TRUE;数学成绩100分大于90分,比较结果是TRUE,用这两个结果直接相乘,相当于1*1,其结果为1
第四位同学丫丫,她的语文成绩62分小于90分,比较结果为FALSE;数学成绩62分小于90分,比较结果为FALSE,用这两个结果直接相乘,相当于0*0,其结果为0
结果以上3为同学的分析,我们发现,只要有一门学科分数小于90分,就会得到一个比较结果为FALSE,而FALSE相当于是0,在数学中0乘以任何数都等于0,因此我们可以知道,在用两个结果相乘的情况下,只要有一个结果是FALSE,那么最终相乘的结果必定是0;而反之,只有当所有的结果都是TRUE的情况下,最终结果才是1。因此,我们把每一位同学的两个比较结果直接相乘,在F3单元格输入公式=D3*E3,向下填充再得到一个辅助列:

此时,我们可以看到第三个辅助列中,只有两门学科都大于90分的同学对应的位置结果才是1,但凡有一门或两门学科小于90分,其最终结果都是0.相当于我们把满足题目要求的同学转化成了1,不满足的就变成0了(这个思路在复杂函数构造中非常重要,很多复杂的嵌套函数,最终都是以此为思路实现最终目标)。最后我们只需要对第三个辅助列进行SUM求和,即可得到我们的答案,这里就不再赘述,在任意单元格输入=SUM(F3:F9)即可。
但是以上我们是分步采用辅助列来完成的,和数组并无关系。有的同学看到这里觉得好像讲了,又好像没讲。这里需要说明一下,以上的分析过程,就是大家以后学习复杂嵌套函数的过程,将过程捋清楚了,再用函数嵌套来替换辅助列,就变成了复杂嵌套函数。现在我们来用数组替代辅助列。
首先,判断两门学科分数是否大于90分,我们辅助列是一个个单元格判断的,但是既然是同样的判断,我们可否批量判断呢?答案肯定是可以,我们可以在目标单元格输入=B3:B9>90,这个公式的意思是,将B3:B9单元格批量与90进行比较,并将结果放到一个数组当中。这箱单与我们讲解的一维数组与常量的计算规则,一维数组与常量依次进行比较,最终生成一个TRUE和FALSE构成的一维数组,其结果与D列的内容相同,只不过存在于数组中。=B3:B9>90得到{FALSE;TRUE;TRUE;FALSE;TRUE;FALSE;FALSE}
同理,数学也做相同的比较,=C3:C9>90得到{TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;TRUE}
得到这两个同方向相同大小的一维数组后,就可以将他们相乘了,再次用到上一期讲解到的内容,两个同方向的数组相乘(加),是对应位置的元素相乘,生成一个新的相同大小的一维数组。(B3:B9>90)*( C3:C9>90)得到数组{0;1;1;0;0;0;0},也就是我们第三个辅助列的内容,最后就是用SUM函数把得到的这个数组做个求和就好了,因此就得到最终的公式:=SUM((B3:B9>90)*(C3:C9>90))。数组公式需要CTRL+SHIFT+回车结束(但是这个公式只有一个结果,不按三键也能得到正确结果)
综上来看,数组是不是能把一些复杂的问题简单化,让我们省去很多复杂的中间步骤。这个案例只是简单带大家认识数组和数组的作用,以及这种相对复杂问题该如何来分析。当然此案例也可以使用COUNTIFS函数来实现。
最后,第二个案例我们就不再赘述,大家可以自己根据我们的分析方法来一步步操作,最后再用数组来合并解决,案例如下,大家可以自行讨论:

本期就讲到这里啦~欢迎大家提出意见和建议,一起互相学习,共同进步!