Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2212|回复: 10

[已解决]如何从成绩册中提取各级各科第一名信息

[复制链接]
发表于 2016-12-28 09:10 | 显示全部楼层 |阅读模式
本帖最后由 zhshdaan 于 2016-12-28 15:44 编辑

提取各个年级的单科第一名成绩,不是一个班级的单科第一名成绩,如:求出四年级语、数。英单科第一、总分第一,三年级语、数、英单科第一、总分第一,不按班级取单科第一,按年级取单科第一,取所有年级的单科第一名,总分第一名,
最佳答案
2016-12-28 14:01
zhshdaan 发表于 2016-12-28 13:36
用过这个,但是这个只是按班级排出  班级=INDEX(成绩表!A:A,MOD(SMALL(IFERROR(ROW($11:$63)*1000+MATCH( ...

我用輔助列寫了個..你看看吧.

求助排名.rar

10.07 KB, 下载次数: 5

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2016-12-28 14:01 | 显示全部楼层    本楼为最佳答案   
zhshdaan 发表于 2016-12-28 13:36
用过这个,但是这个只是按班级排出  班级=INDEX(成绩表!A:A,MOD(SMALL(IFERROR(ROW($11:$63)*1000+MATCH( ...

我用輔助列寫了個..你看看吧.

成绩表輔助列.rar

20.32 KB, 下载次数: 1

回复

使用道具 举报

发表于 2016-12-28 10:05 | 显示全部楼层
兩個公式完成
首先對分數
再通過分數去查找對應的資料
DEF分數列公式
=TEXT(MAX(IF(LEFT(成绩表!$A$2:$A$118)=TEXT(INT(ROW(A3)/3),"[DBNUM1]"),成绩表!D$2:D$118))*(MOD(ROW(A3),3)+1=COLUMN(A1)),"#;;")數組公式
ABC列學生信息公式
=OFFSET(成绩表!$A$1,MATCH(1,(LEFT(成绩表!$A$2:$A$118)=TEXT(INT(ROW(C3)/3),"[DBNUM1]"))*(OFFSET(成绩表!$D$2,,MAX(MOD(ROW(C3),3),),117,1)=--INDIRECT(CHAR(68+MAX(MOD(ROW(C3),3),))&MAX(ROW(),))),),COLUMN(A1)-1)
數組公式.
詳見附件.
不要再問怎麼算來的..不好解釋.

成绩表.rar

13.4 KB, 下载次数: 2

评分

参与人数 1 +20 金币 +20 收起 理由
望帝春心 + 20 + 20 我和小伙伴都惊呆了

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-12-28 13:25 | 显示全部楼层
心正意诚身修 发表于 2016-12-28 10:05
兩個公式完成
首先對分數
再通過分數去查找對應的資料

这个公式不错,但是还是有点问题,如果出现相同的分数,他只选择最前面的那一个了,不能两个同时并列出现,如:如果语文一年级两个100分,那么这两个人的信息都列出来
回复

使用道具 举报

发表于 2016-12-28 13:32 | 显示全部楼层
zhshdaan 发表于 2016-12-28 13:25
这个公式不错,但是还是有点问题,如果出现相同的分数,他只选择最前面的那一个了,不能两个同时并列出现 ...

那樣的話.函數就太燒腦了.估計還得加輔助列.要不.你去VBA版塊求助試試
讓他們寫代碼去實現.

回复

使用道具 举报

 楼主| 发表于 2016-12-28 13:32 | 显示全部楼层
心正意诚身修 发表于 2016-12-28 10:05
兩個公式完成
首先對分數
再通過分數去查找對應的資料

还有,如果再加一科如何排出来,如语文、数学、英语、物理现在四科,如何也列出来
回复

使用道具 举报

发表于 2016-12-28 13:36 | 显示全部楼层
多科目.解法是一樣的.就是把現在的3改成對應的4或者5.
回复

使用道具 举报

 楼主| 发表于 2016-12-28 13:36 | 显示全部楼层
心正意诚身修 发表于 2016-12-28 13:32
那樣的話.函數就太燒腦了.估計還得加輔助列.要不.你去VBA版塊求助試試
讓他們寫代碼去實現.

用过这个,但是这个只是按班级排出  班级=INDEX(成绩表!A:A,MOD(SMALL(IFERROR(ROW($11:$63)*1000+MATCH(TEXT(ROW($11:$63),"[dbnum1]0"),成绩表!A$1:A$118,),999999),INT(ROW(A5)/3)),1000))&""


姓名=contxt(IF((成绩表!$A$2:$A$118=$A2)*(OFFSET(成绩表!$C$2:$C$118,,MIN(MOD(ROW(A1)-1,3))+1)=SUM($D2:$F2)),"、"&成绩表!B$2:B$118,""))


分数==IF(OR((MOD(ROW(A7)-1,3)+1)*COLUMN(A7)={1,4,9}),MAX((成绩表!$A$2:$A$118=$A8)*成绩表!D$2:D$118),"")

回复

使用道具 举报

发表于 2016-12-28 13:54 | 显示全部楼层
zhshdaan 发表于 2016-12-28 13:36
用过这个,但是这个只是按班级排出  班级=INDEX(成绩表!A:A,MOD(SMALL(IFERROR(ROW($11:$63)*1000+MATCH( ...

如果加多幾個輔助列的話..可以實現.而且公式也不用寫得像之前那麼復雜.
回复

使用道具 举报

 楼主| 发表于 2016-12-28 14:02 | 显示全部楼层
心正意诚身修 发表于 2016-12-28 13:54
如果加多幾個輔助列的話..可以實現.而且公式也不用寫得像之前那麼復雜.

加个辅助列如何实现

点评

已經發給你了.  发表于 2016-12-28 14:03
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-24 04:20 , Processed in 0.333695 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表