Excel中,求A列不重复且B列不重复,筛选出C列的最大值。 5
姓名 科目 成绩
张三 语文 70
张三 数学 48
张三 数学 60
李四 语文 58
李四 语文 70
李四 数学 88
王二 语文 66
王二 数学 74
希望最后筛选出来的结果是:
(每个人每个科目只有唯一成绩,成绩为重复成绩的最大值)
姓名 科目 成绩
张三 语文 70
张三 数学 60
李四 语文 70
李四 数学 88
王二 语文 66
王二 数学 74
这个数据一共有100个姓名,50多个科目,每人每科的重复成绩有多有少(有的重复了8次),所以样本量大概有1W个,谢谢大家。 展开
鉴于数据量大,尽量避免使用数组公式。
如果同一人、同一科目的数据是在相连的几行,公式就简单。
例如格式如下:
A B C D E F G H
1 姓名 科目 成绩 姓名 科目 成绩
2 张三 语文 70 1
A-C列为原数据,D列为辅助列
D2=IF(AND(A2=A1,B2=B1),D1,D1+1)
F-H列为生成后的数据
F2=IF((ROW()-1)>MAX($D:$D),"",INDEX(A:A,MATCH(ROW()-1,$D:$D,)))
G2=IF((ROW()-1)>MAX($D:$D),"",INDEX(B:B,MATCH(ROW()-1,$D:$D,)))
H2=IF(F2="",,MAX(OFFSET(C$1,MATCH(ROW()-1,D:D,)-1,,COUNTIF(D:D,ROW()-1))))
将D2:H2的公式向下拉即可。
如果同一人、同一科目的数据不是相连,公式就要复杂点。
如果是后面的情况你再找我吧,公式是可以解决的。
数据不是相连的,谢谢你的回答~
为避免使用数组公式,增加四个辅助列,例如格式如下:
A B C D E F G H I J
1 姓名 科目 成绩 姓名 科目 成绩
2 张三 语文 70 张三_语文 1 1070
A-C列为原数据,D-G列为辅助列,H-J列为生成后的数据
其中,D、E列用于去重复
D2=A2&"_"&B2
E2=IF(COUNTIF(D$2:D2,D2)=1,ABS(E1)+1,-ABS(E1))
将D2:E2公式向下拉
然后
H2=IF(ROW()-1<=MAX($E:$E),INDEX(A:A,MATCH(ROW()-1,$E:$E,)),"")
I2=IF(ROW()-1<=MAX($E:$E),INDEX(B:B,MATCH(ROW()-1,$E:$E,)),"")
这样,H:I的数据就是不重复的了
然后求最大值,如果编个数组公式自然简单,但数据量大的时候数组公式运算慢
这里使用辅助列以提高运算速度
F2=IF(D2="","",--(INDEX(E:E,MATCH(D2,D:D,))&TEXT(C2,"000")))
G2=RANK(F2,F:F)
然后
J2=IF(H2="",,INDEX(C:C,MATCH(COUNTIF(F:F,">"&INDEX(E:E,MATCH(H2&"_"&I2,D:D,))&"999")+1,G:G,)))
另外,H:I列的数据,还可能涉及排序的问题,要视乎你的实际情况
因为,一般学生有个学号的,而不是直接按姓名排序的
科目最好也有个代码而方便排序。
=IF(SUMPRODUCT((A$2:A$8=A2)*(B$2:B$8=B2)*(C$2:C$8>C2)),"删除","保留") 下拉
D列中作筛选,选出保留的行就可以了。
只有第一个人的可以,后面的全是保留。
这个数据一共有100个姓名,50多个科目,每人每科的重复成绩有多有少(有的重复了8次),所以样本量大概有1W个,希望你能够帮我解决,谢谢!
数据太多,用公式处理就不合适了,可以考虑VBA,请人写段代码吧。