如何通过工作表函数筛选并排序符合条件的记录(不使用数据透视表)
如何通过工作表函数筛选并排序符合条件的记录(不使用数据透视表)
没问题!完全可以用工作表函数实现你的需求,不用数据透视表也能搞定。我来帮你拆解步骤,修正你之前的问题,再给出合适的公式方案~
先说说你现有公式的问题
你之前写的公式 =INDEX($A$1:$A$4, SMALL(IF($B$1:$B$4>4,ROW($B$1:$B$1)), ROW())) 有几个小疏漏:
- 条件写反了:你要筛选分数≤4的记录,但公式里用了
$B$1:$B$4>4,刚好把需要的结果排除了 - 行号范围错误:
ROW($B$1:$B$1)只取了第一行的行号,应该覆盖整个数据范围(比如你的数据实际是5行,应该写ROW($B$1:$B$5)) - 没处理排序和重复项:公式逻辑没结合分数排序,也无法应对像Claire和Evie这种同分数的情况
解决方案分两种情况(兼容新旧版Excel)
情况1:Excel 365/2021(支持动态数组,最简便)
一个公式就能一步完成筛选+排序,在D1单元格直接输入:
=SORT(FILTER(A1:B5,B1:B5<=4),2,1)
FILTER(A1:B5,B1:B5<=4):先筛选出B列分数≤4的所有行SORT(...,2,1):把筛选后的结果按第2列(分数)升序排列(1代表升序,换成2就是降序)
输入后公式会自动溢出到D、E列,直接得到你想要的结果:
| D | E |
|---|---|
| Claire | 2 |
| Evie | 2 |
| Anna | 4 |
情况2:旧版Excel(无动态数组,用数组公式)
如果你的Excel不支持动态数组,就分两列写公式,输入后必须按Ctrl+Shift+Enter确认(数组公式会自动在前后加上{}):
- E列(排序后的分数)
在E1单元格输入,然后下拉到E3:
=SMALL(IF($B$1:$B$5<=4,$B$1:$B$5,""),ROW())
这个公式会依次提取符合条件的分数里的第1小、第2小、第3小值,自动完成升序排序。
- D列(对应姓名,处理重复分数)
在D1单元格输入,然后下拉到D3:
=INDEX($A$1:$A$5,MATCH(1,($B$1:$B$5=E1)*(COUNTIF($D$1:D1,$A$1:$A$5)=0),0))
公式逻辑:
$B$1:$B$5=E1:找到所有分数等于当前E列值的行COUNTIF($D$1:D1,$A$1:$A$5)=0:确保这个姓名还没在D列上方出现过(避免重复提取)MATCH(1,...):找到同时满足两个条件的第一个行号,再用INDEX取出对应姓名
这样就能得到和目标完全一致的结果啦!
备注:内容来源于stack exchange,提问作者MyDaftQuestions
相关产品推荐
相关产品推荐

