之前文章介绍过我们使用COUNTIF函数来求得单元格区域中文本的顺序号,然后根据该顺序号获得相应的文本,从而实现文本排序。
本文不使用辅助列,直接使用一个数组公式来获得排序文本。
如下图1所示,列A中是没有排序的文本,列B中是排好序的文本。
图1
在单元格B2中的数组公式是:
- =INDEX(List,MATCH(SMALL(COUNTIF(List,”<“&List),ROW(1:1)),COUNTIF(List,”<“&List),0))
其中,List是一个定义的名称。
名称:List
引用位置:=Sheet1!$A$2:$A$7
这个公式的核心是COUNTIF函数部分,判断指定的字符串是否小于列表中其他字符串面得到一组数字,即:
- COUNTIF(List,”<“&List)
转换为:
- {5;0;2;3;0;3}
表明,在单元格区域A2:A7中,有5个小于单元格A2中的“DDD”、没有小于单元格A3中的“AAA”、有2个小于单元A4中的“BBB”、…,依此类推。
这样,单元格B2中的公式转换为:
- =INDEX(List,MATCH(SMALL({5;0;2;3;0;3},ROW(1:1)),{5;0;2;3;0;3},0))
转换为:
- =INDEX(List,MATCH(SMALL({5;0;2;3;0;3},1), {5;0;2;3;0;3},0))
转换为:
- =INDEX(List,MATCH(0,{5;0;2;3;0;3},0))
转换为:
- =INDEX($A$2:$A$7,2)
得到:
AAA
当公式向下拉时,ROW(1:1)将相应变化,从而获取不同的文本值。