第一个区域通过单元格A2偏移0行为起点、高度为11行组成 , 即为单元格A2:A12;第二个区域通过单元格A2偏移1行为起点、高度为10行组成 , 即为单元格A3:A12;第三个区域为A4:A12;第四个区域为A5:A12;依此类推 , 第11个区域为单元格A12 。
对应于这11个单元格区域中的每个区域 , 传递给COUNTIF函数的第2个参数criteria是Arry1中11个数组元素相应位置的值 , 因此 , 上述COUNTIF函数部分实际上执行下列公式运算:
=COUNTIF(A2:A12,A2)
=COUNTIF(A3:A12,A3)
=COUNTIF(A4:A12,A4)
…
=COUNTIF(A12:A12,A12)
得到数组:
{2;1;1;3;2;1;2;1;1;2;1}
这里 , 我们已成功生成一系列数值 , 可帮助我们来区分List1中相同的数字 。
3. 此时 , 公式中的部分:
List1+(COUNTIF(OFFSET(INDEX(List1,1,1),Arry1,,Arry2,),List1)/10^6)
转换为:
List1+({2;1;1;3;2;1;2;1;1;2;1}/10^6)
转换为:
List1+({0.000002;0.000001;0.000001;0.000003;0.000002;0.000001;0.000002;0.000001;0.000001;0.000002;0.000001})
转换为:
{1;1;2;3;3;3;4;4;5;6;6}+({0.000002;0.000001;0.000001;0.000003;0.000002;0.000001;0.000002;0.000001;0.000001;0.000002;0.000001})
结果为:
{1.000002;1.000001;2.000001;3.000003;3.000002;3.000001;4.000002;4.000001;5.000001;6.000002;6.000001}
虽然只是将List1中的各个数字增加了非常小的数字 , 但构成的数组中的每个元素都是唯一的 。例如 , 在原来的List1中有三个3 , 现在变成了3.000001、3.000002和3.000003 。
注意 , 这里区分这些List1中数字的小增量不只是随机的 , 相反 , 它们将计数每个元素的数量 。例如 , 如果在生成的数组中整数部分为3的最大值为3.000003 , 那么我们知道List1中应该恰好有3个元素3 。类似地 , 该数组中整数部分为2的最大值为2.000001 , 这告诉我们List1中只有1个元素1 。
4. 在List2中执行相同的操作:
List2+(COUNTIF(OFFSET(INDEX(List2,1,1),Arry1,,Arry2,),List2)/10^6)
转换为:
{1;3;3;6;0;0;0;0;0;0;0}+(COUNTIF(OFFSET($B$2,{0;1;2;3;4;5;6;7;8;9;10},,{11;10;9;8;7;6;5;4;3;2;1},),{1;3;3;6;0;0;0;0;0;0;0})/10^6)
转换为:
{1;3;3;6;0;0;0;0;0;0;0}+({1;2;1;1;0;0;0;0;0;0;0}/10^6)
最后得到的结果为:
{1.000001;3.000002;3.000001;6.000001;0;0;0;0;0;0;0}
这样 , 将原来List2中的元素转换成了由唯一值构成的数组 。
5. 现在 , 可以使用MATCH函数来比较这两个数组 。IF语句中为FALSE的部分:
SMALL(IF(1-ISNUMBER(MATCH(List1+(COUNTIF(OFFSET(INDEX(List1,1,1),Arry1,,Arry2,),List1)/10^6),List2+(COUNTIF(OFFSET(INDEX(List2,1,1),Arry1,,Arry2,),List2)/10^6),0)),List1),ROWS($1:1))
可以转换为:
SMALL(IF(1-ISNUMBER(MATCH({1.000002;1.000001;2.000001;3.000003;3.000002;3.000001;4.000002;4.000001;5.000001;6.000002;6.000001},{1.000001;3.000002;3.000001;6.000001;0;0;0;0;0;0;0},0)),List1),ROWS($1:1))
转换为:
SMALL(IF(1-ISNUMBER({#N/A;1;#N/A;#N/A;2;3;#N/A;#N/A;#N/A;#N/A;4}),List1),ROWS($1:1))
转换为:
SMALL(IF(1-{FALSE;TRUE;FALSE;FALSE;TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE},List1),ROWS($1:1))
转换为:
SMALL(IF({1;0;1;1;0;0;1;1;1;1;0},{1;1;2;3;3;3;4;4;5;6;6}),ROWS($1:1))
转换为:
SMALL({1;FALSE;2;3;FALSE; FALSE;4;4;5;6; FALSE },ROWS($1:1))
返回数字:
1
这正是我们需要的 。
单元格C3中的公式会转换为:
SMALL({1;FALSE;2;3;FALSE; FALSE;4;4;5;6; FALSE },ROWS($1:2))
返回数字:
2
依此类推 。
【excel公式教程: 求一列中的数字剔除掉另一列中的数字后剩下的数字】
猜你喜欢
- excel公式教程:TRANSPOSE,非数组版本
- excel公式教程: 找到和的加数
- excel公式教程:找到和的加数
- excel公式教程:拆分连字符分隔的数字并放置在同一列中
- Excel下拉菜单的三种做法
- Excel表格INDIRECT函数的妙用
- SUMPRODUCT分组排名公式
- 多关键字 怎么用公式实现根据多个条件排名次
- Excel 多工作表合并
- excel只需鼠标按序点下去,即可多工作合并
