Excel中INDEX返回结果含空白值时如何排序并指定空白值首尾位置
实现方案
针对INDEX返回结果排序时自定义空白单元格位置的需求,可根据使用的Excel版本选择对应方案:
动态数组溢出写法(Excel 365/2021及以上版本适用)
无需逐行下拉公式,在首个结果单元格输入后会自动向下溢出所有去重排序结果,运行效率更高。
- 空白值统一放在排序结果末尾:
=LET( source_rng, EQUIPMENT!$D$10:$D$900, sorted_nonblank, SORT(UNIQUE(FILTER(source_rng, source_rng<>""))), blank_cnt, ROWS(source_rng) - COUNTA(source_rng), blank_arr, IF(SEQUENCE(blank_cnt),""), VSTACK(sorted_nonblank, blank_arr) )
- 空白值统一放在排序结果最前端:
=LET( source_rng, EQUIPMENT!$D$10:$D$900, sorted_nonblank, SORT(UNIQUE(FILTER(source_rng, source_rng<>""))), blank_cnt, ROWS(source_rng) - COUNTA(source_rng), blank_arr, IF(SEQUENCE(blank_cnt),""), VSTACK(blank_arr, sorted_nonblank) )
如果不需要对结果去重,直接删除公式内的
UNIQUE()函数即可。
旧版本兼容写法(逐行下拉使用)
不支持动态数组函数的版本,可通过SORTBY给源数据增加空白排序权重,沿用原有COUNTIF+MATCH的去重逻辑:
- 空白值放在排序结果末尾:
=IFERROR(INDEX(SORTBY(EQUIPMENT!$D$10:$D$900,--(EQUIPMENT!$D$10:$D$900=""),1,1),MATCH(0,COUNTIF($A$134:A134,SORTBY(EQUIPMENT!$D$10:$D$900,--(EQUIPMENT!$D$10:$D$900=""),1,1)),0)),"")
- 空白值放在排序结果最前端:
=IFERROR(INDEX(SORTBY(EQUIPMENT!$D$10:$D$900,--(EQUIPMENT!$D$10:$D$900=""),-1,1),MATCH(0,COUNTIF($A$134:A134,SORTBY(EQUIPMENT!$D$10:$D$900,--(EQUIPMENT!$D$10:$D$900=""),-1,1)),0)),"")
提问中提供的原公式如下,运行效果见附图:
=IFERROR(SORT(INDEX(EQUIPMENT!$D$10:$D$900,MATCH(0,COUNTIF($A$134:A134,EQUIPMENT!$D$10:$D$900),0))),"")
内容的提问来源于stack exchange,提问作者soldier2gud4me
相关产品推荐
相关产品推荐

