如何无需额外列,用单个公式反转Filter函数输出顺序?
问题:如何用单个公式反转FILTER+UNIQUE的输出顺序?
我使用以下公式生成项目列表:
=UNIQUE(FILTER(T15:T&"Q "&U15:U,S15:S=TRUE))
待过滤的数据如下:
| ColS | ColT | ColU |
|---|---|---|
| TRUE | 3 | 2022 |
| TRUE | 3 | 2022 |
| TRUE | 4 | 2022 |
| FALSE | 4 | 2022 |
| TRUE | 4 | 2022 |
| TRUE | 1 | 2023 |
| FALSE | 1 | 2023 |
| TRUE | 1 | 2023 |
| FALSE | 2 | 2023 |
| TRUE | 2 | 2023 |
| TRUE | 2 | 2023 |
| FALSE | 3 | 2023 |
| FALSE | 3 | 2023 |
| FALSE | 3 | 2023 |
| FALSE | 4 | 2023 |
| FALSE | 4 | 2023 |
| FALSE | 4 | 2023 |
当前输出结果:
3Q 2022 4Q 2022 1Q 2023 2Q 2023
期望的反转顺序输出:
2Q 2023 1Q 2023 4Q 2022 3Q 2022
请问能否不新建额外列,仅用单个公式实现该需求?
解决方案
可以实现,根据Excel版本不同,有两种简洁的单公式方案:
1. Excel 365/2021(支持动态数组)
直接通过INDEX配合SEQUENCE生成倒序索引来反转结果,公式如下:
=INDEX(UNIQUE(FILTER(T15:T&"Q "&U15:U,S15:S=TRUE)),SEQUENCE(ROWS(UNIQUE(FILTER(T15:T&"Q "&U15:U,S15:S=TRUE))),,ROWS(UNIQUE(FILTER(T15:T&"Q "&U15:U,S15:S=TRUE))),-1))
如果想让公式更简洁易读,用LET函数封装中间结果:
=LET( unique_filtered, UNIQUE(FILTER(T15:T&"Q "&U15:U,S15:S=TRUE)), INDEX(unique_filtered, SEQUENCE(ROWS(unique_filtered),,ROWS(unique_filtered),-1)) )
原理:先通过UNIQUE+FILTER得到原始去重列表,再用SEQUENCE生成从列表最后一行到第一行的倒序行号,最后用INDEX按倒序行号提取内容,自动溢出全部结果。
2. 旧版Excel(无动态数组支持)
使用INDEX+COUNTA组合,输入公式后按Ctrl+Shift+Enter作为数组公式,再下拉填充:
=INDEX(UNIQUE(FILTER(T15:T&"Q "&U15:U,S15:S=TRUE)),COUNTA(UNIQUE(FILTER(T15:T&"Q "&U15:U,S15:S=TRUE)))-ROW(A1)+1)
原理:用COUNTA获取去重列表的总行数,通过ROW(A1)的递增特性,依次提取从最后一行到第一行的内容。
内容的提问来源于stack exchange,提问作者DanCue
相关产品推荐
相关产品推荐

