上次预定,开启进阶!
或者使用昨天的同一组样本数据,稍微改变一下演示文稿:
但是,今天不用辅助栏,直接用公式,淘汰指定名称,写保留名称和分数。
公式实现
在单元格F2中输入公式:
=if错误(index (a $ 2:a $10,small(if(countif $ d $ 2:d $ 6,a $ 2:a $10),"",row(1: $ 9)),row (a1。
将公式向下向右填充,去掉指定名称后会得到保留名称和对应的分数。
图片:
公式分析
COUNTIF(2:澳元6澳元2:澳元10澳元)
从D2:D5指定的名称区域依次查找A1:A9的所有名称,找到的返回1,没有找到的返回0。所以公式的这一部分返回一个由1和0组成的数组:
{0;1;1;0;1;1;0;1;0 }
ROW(1:美元,9美元)
返回由1-9组成的数组:
{1;2;3;4;5;6;7;8;9}
IF(COUNTIF(D $ 2:D $ 6,A $ 2: $ A $ 10),"",ROW(1: A $ 9))
下图解释了该公式的原理:
因此,本节中IF函数的返回值是一个数组:
{1;"";"";4;"";"";7;"";9}
SMALL(IF(COUNTIF(D $ 2:D $ 6,A $ 2: $ A $ 10),"",ROW(1: $ 9)),ROW(A1))
ROW(A1)的返回值是1,所以这部分返回数组{ 1;"";"";4;"";"";7;"";最小值为9},即1;每当公式中的某一行被向下填充时,ROW(A1)就会变成ROW(A2)、ROW(A3)、row (a4).SMALL公式的这一部分将返回数组{ 1;"";"";4;"";"";7;"";2, 3, 4 .9的,也就是4,7,9.
INDEX(A$2:A$10,SMALL(IF(COUNTIF $ 2:D $ 6,A$2:A$10),"",ROW(1: $ 9)),ROW(A1)))
在公式F2中,返回A2:A10区域中第一位的数据a1;公式向下填充,即返回A2:A10区域中第4、7、9位的数据A4、A7、A9,从而得到去除指定名称后保留的名称;
iforr(INDEX(A$2:A$10,SMALL)(IF(COUNTIF $ D $ 2:D $ 6,A $ 2: A $ 10),"",ROW(1: $ 9)),ROW(A1)),"")
使用IFERROR,如果找到结果,它将返回一个值,如果没有找到,如果有错误,它将返回一个空值。
保留等级的计算:
因为公式中的A$2:A$10使用了混合引用,并且A列没有被锁定,所以将其填充到右边将会从B$2:B$10改变,也就是B列的保留结果.