该公式是数组公式,有两处执行数组公式运行,分别是“IF(H$4:H$18>H4,……)”部分和“1/COUNTIF(H$4:H$18,H$4:H$18)”部分。现简单介绍该公式的运行过程。为了方便理解,我们先介绍“1/COUNTIF(H$4:H$18,H$4:H$18)”。 我们先看“COUNTIF(H$4:H$18,H$4:H$18)”部分,它的运行过程是: 步骤一、COUNTIF(H$4:H$18,H$4), 步骤二、COUNTIF(H$4:H$18,H$5), 步骤三、COUNTIF(H$4:H$18,H$6), …… 步骤十五、COUNTIF(H$4:H$18,H$18) 对照H$4:H$18里放置的是员工的成绩总分,可以得到结果(1;1;1;2;1;1;1;2;2;1;1;1;1;1;2),其中“1”代表某单元格中的内容在H$4:H$18区域中的出现次数仅有一次,也就说没有重复项;“2”代表某单元格中的内容在H$4:H$18区域里重复2次。此处的运算类似给该区域内重复的数贴上标签一样,提醒有重复和重复的次数。 至于“1/COUNTIF(H$4:H$18,H$4:H$18)”的运行结果,就是(1;1;1;1/2;1;1;1;1/2;1/2;1;1;1;1;1;1/2)。为什么要这样处理?不要急,要结合整个公式来看。 再看“IF(H$4:H$18>H4……)”部分,实现的功能是H4单元格中的内容分别和H$4:H$18区域内的各个单元格内容进行大小比较。 步骤一、IF(H$4>H4……) 步骤二、IF(H$5>H4……) …… 步骤十五、IF(H$18>H4……) 返回值分别是(FALSE,TRUE,FALSE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,TRUE,FALSE,TRUE)。因为“IF(H$4:H$18>H4,1/COUNTIF(H$4:H$18,H$4:H$18))”省略了“value_if_false”,因此当“步骤一IF(H$4>H4……)”得到FALSE时,此时将返回结果“FALSE”,当“步骤二IF(H$5>H4……)”得到TRUE时,此时将返回结果“1”,以此类推,得到的结果是(FALSE;1;FALSE;1/2;1;1;1;1/2;1/2;1;FALSE;FALSE;1;FALSE;1/2)。 接着SUM函数对IF函数内的结果进行加总,得到结果“8”。为什么还要再加上“1”呢?原因是IF函数内的测试条件是“>”,对于“H$4:H$18区域”里的最大值“98.00”而言,得到的结果是(FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE),那么SUM函数计算得到的值就是“0”,显然排名第0位,不符合常识,因此要额外加上“1”。 现在再回过头看“1/COUNTIF(H$4:H$18,H$4:H$18)”的意图,就是避免重复计算相同项。 至此本公式解释完毕。若其中解释有不妥之处,希望高手们不吝指出。大家共勉!
[此贴子已经被作者于2008-7-9 22:48:45编辑过] |