孤独鹰 发表于 2021-11-11 22:55:00

请教一个数据提取排序的问题

左边3列是举例的数据,真实数据有2000行,能否用函数实现:把前面三列的数据按顺序设定的顺序排列到另一个表吗?比如我顺序设定为一年级、二年级、三年级,那我需要在数据列循环查找一年级并且后面是100的,把一年级排列完后,又查找二年级。。。。。。麻烦大佬列个函数,前三列的数据和顺序设定可能随时发生变化

妙丽 发表于 2021-11-27 15:06:04


首先汉字排序是不识别一二三的,会默认按拼音排,所以你得手动给每个项写个排序先后。如上图我手动在表一用123标注了每个年级的排序先后。
然后就很简单了,用filter函数筛选掉含空值的行后,用sortby排序数组,排序使用的数组为对应年级匹配表1的排序优先级列后得到的结果。
=SORTBY(FILTER(A3:C30,(B3:B30<>"")*(C3:C30<>"")),INDEX(表1,MATCH(FILTER(B3:B30,(B3:B30<>"")*(C3:C30<>"")),表1[名称],0),2))

泵铁 发表于 2021-12-13 19:25:05

如你所愿:
=IFERROR(INDIRECT("r"&RIGHT(SMALL(IFNA(IF($C$3:$C$30=100,MATCH($B$3:$B$30,$E$1:$G$1,)/1%%+$A$3:$A$30),""),ROW(A1)),4)+2&"c"&COLUMN(A1),),"")

他乡忆梦 发表于 2022-1-2 22:08:27

数组三键,右拉下拉

=IFERROR(INDEX(A:A,MOD(SMALL(IF($B$3:$B$2000&$C$3:$C$2000=$E$1:$G$1&100,{1,2,3}/1%%+ROW($3:$2000)),ROW(A1)),10^4)),"")

鶗鴂韵君慕 发表于 2022-2-2 16:18:58

谢谢,万分感谢!

爱土地 发表于 2022-2-10 03:37:04

谢谢了,只是我是2016版,filter函数用不起!

静如秋泓 发表于 2022-2-18 07:05:07

非数组,F5:=LOOKUP(1,0/FREQUENCY(1%,(COUNTIF($F$4:$F4,$A$3:$A2000)=0)*($C$3:$C2000=100)*MATCH($B$3:$B2000&"",$E$1:$H$1&"",)),A$3:A2000)

右拉下拉。
页: [1]
查看完整版本: 请教一个数据提取排序的问题