下图所示为某银行员工单指单张点钞用时考核的部分记录,需要将用时秒数提取不重复数值后从小到大排列,并依次提取出对应的员工名单。
一、提取不重复用时秒数并排序
在 D2 单元格中输入公式=IFERROR(SMALL(IF(FREQUENCY(B$2:B$16,B$2:B$16),B$2:B$16),ROW(B1)),"")
,并向下复制到单元格显示空白为止。
- 公式中的 “FREQUENCY (B$2:B$16,B$2:B$16)” 部分,对于 B2:B16 单元格区域的数值,如果是首次出现,则返回出现的次数;如果是重复出现则返回 0。例如得到的内存数组结果可能是
{2;3;1;1;1;1;2;0;0;0;1;1;1;1;0;0}
。 - 以此作为 IF 函数的第一参数,如果内存数组结果中的数值不等于 0,返回 B2:B16 单元格区域中对应的数值,否则返回逻辑值 FALSE。相当于提取出了用时秒数不重复值的内存数组结果,如
{26.44;27.88;27.89;28.95;29.44;27.34;25.39;FALSE;FALSE;FALSE;28.14;25.63;29.33;27.13;FALSE;FALSE}
。 - 最后使用 SMALL 函数,从小到大依次提取出不重复的用时秒数。
二、根据用时秒数提取对应的员工名单
在 E2 单元格中输入数组公式{=INDEX($A:$A,SMALL(IF($B$2:$B$16=$D2,ROW($2:$16),4^8),COLUMN(A1)))&""}
,按 组合键,将公式复制到 E2:G14 单元格区域。
这个公式的运算过程较为复杂,主要是通过 INDEX 函数结合 SMALL 函数和 IF 函数来实现。首先,IF 函数判断 B2:B16 单元格区域中的用时秒数是否等于 D2 单元格中的某个不重复用时秒数,如果相等,则返回对应的行号,否则返回一个较大的数值(这里是 4^8)。然后,SMALL 函数从小到大依次提取这些行号。最后,INDEX 函数根据提取出的行号从 A 列(员工名单列)中提取出对应的员工名字,并通过连接空字符串 "" 来处理可能出现的错误值。
通过以上步骤,可以从员工考核记录中提取出不重复的用时秒数并从小到大排序,同时提取出对应的员工名单,方便对员工考核情况进行整理和分析。
评论 (0)