今天遇到一个实例问题:在对应不同对象的记录里,查找某事件相关的日期,然后返回最早及最晚的日期。
最早和最晚无非用MIN()和MAX(),难度在于在一堆记录里,某个事件可能会有好几条记录相关。当然,这个工作用数据透视表也可以完成,但我这不是研究如何用函数得到嘛。那最终的问题在于,如何就某个事件返回一个数组,然后就这个数组进行最小最大分析。
在百度上查了一下,我们采用具体一个案例介绍如何实现这个目的。
如图,有三列数据,第一列为性别,第二列为成绩,第三列为身高。我们想查成绩高于50分的男生中,身高最高的是多少?
公式已经显示在C10里面,{=MAX(IF((B3:B8)="男")*(C3:C8>50),D3:D8))}。简单讲一下,最外面的大括号是表示基于数组运算,在输完公式(不带大括号)后直接按CTRL-SHIFT-ENTER直接得到。如果直接在公式里输入大括号反而会失败。
接下来解释一下,这个公式在做什么。最外面的MAX表示在一个数组中查找最大的。最关键的是MAX使用的数组是如何得到的?就是靠IF((B3:B8)="男")*(C3:C8>50),D3:D8)得到的。其实就是根据B列为男,C列大于50这两个条件,筛选D列并返回。其实此时返回的数组长度还是D3到D8的内容,长度为6。只是不满足上述两个条件是被标记为FALSE。
具体大家还有疑惑的,可以用【公式】->【公式求值】进行单步操作,一步一步观察发生了什么?
