excel问题:有一张表 姓名 学号 科目 成绩 想变成 姓名 学号 语文 英语 数学 张三 001
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了excel问题:有一张表 姓名 学号 科目 成绩 想变成 姓名 学号 语文 英语 数学 张三 001相关的知识,希望对你有一定的参考价值。
有一张表 姓名 学号 科目 成绩 想变成 姓名 学号 语文 英语 数学
张三 001 语文 80 张三 001 80 85 89
李四 002 语文 75 李四 002 75 79 65
张三 001 数学 89
李四 002 数学 65
张三 001 英语 85
李四 002 英语 79
用VBA吧,你提出的这个类型一般数据量都比较大的。应该不止这几门成绩的统计吧。
下面的代码复制到VBA中运行即可:
Sub ScorePX()
Dim KID As Single '定义学号
Dim RowEnd As Single '定义结束行号
Dim RowRecord As Single '定义新序列插入位置
Dim ColW As Single
Dim SumX As Single '定义总分
ActiveWorkbook.ActiveSheet.Sort.SortFields.Clear
ActiveWorkbook.ActiveSheet.Sort.SortFields.Add Key:=Range("B1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.ActiveSheet.Sort
.SetRange Range("A2:D5000") '可通过修改"D5000"的值扩大排序范围
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
RowEnd = 1
RowRecord = 2
Do Until ActiveSheet.Cells(RowEnd, 2) = ""
KID = 1
SumX = 0
Do Until ActiveSheet.Cells(RowEnd + KID, 2) <> ActiveSheet.Cells(RowEnd + KID + 1, 2) Or ActiveSheet.Cells(RowEnd + KID + 1, 2) = ""
ActiveSheet.Cells(RowRecord, KID + 7) = ActiveSheet.Cells(RowEnd + KID, 4)
SumX = SumX + ActiveSheet.Cells(RowRecord, KID + 7)
KID = KID + 1
Loop
ActiveSheet.Cells(RowRecord, KID + 7) = ActiveSheet.Cells(RowEnd + KID, 4)
SumX = SumX + ActiveSheet.Cells(RowRecord, KID + 7)
ActiveSheet.Cells(RowRecord, KID + 8) = SumX
ActiveSheet.Cells(RowRecord, 6) = ActiveSheet.Cells(RowEnd + KID, 1)
ActiveSheet.Cells(RowRecord, 7) = ActiveSheet.Cells(RowEnd + KID, 2)
If RowEnd = 1 Then
ColW = KID + 1
ActiveSheet.Cells(1, ColW + 7) = "总分合计"
Do Until ColW <= 1
ActiveSheet.Cells(1, ColW + 6) = ActiveSheet.Cells(ColW, 3)
ColW = ColW - 1
Loop
End If
RowRecord = RowRecord + 1
RowEnd = RowEnd + KID
Loop
End Sub
在使用上述代码前,请确保以下事项:
1、对原数据表格进行备份
2、确保“姓名”在A列,“学号”在B列,“科目”在C列,“成绩”在D列
3、在运行代码前,确保欲排序的表格处于激活状态
4、请确保每个人员的科目数目一样多,如果某科目无成绩,请将相关项目充填为零,否则程序将出错。
这段代码的运行过程:
首先对数据按照学号进行扩展排序,然后通过循环语句进行数据的读取和赋值。
程序功能:
1、无论科目多少,都可以排序,自动横向充填
2、以学号为排序依据,名字可以重复,但学号肯定不会重复
3、增加个人成绩总分统计功能
4、如果需要,可以在增加代码的基础上,完成人员成绩排名
最后,为你做这个代码,是冲着高分来的,使用满意请给分。话说回来,即便是分不给我,本人也没有办法,代码已经公开了,谁想用都可以,就算是练手和做贡献了。 附图显示了运行后的效果。
参考技术A 使用VLOOKUP函数查找即可 参考技术B 随便找个软件就可以。 参考技术C 用条件求和公式可以转=SUM(IF($A$2:$A$7(说明:旧表中学生姓名所在列)=$F2(说明:相对引用,新表学生姓名单元格),IF($C$2:$C$7(说明:旧表中学生科目所在列)="语文",$D$2:$D$7(说明:旧表中学生成绩所在列))))
在一个单元格中做好公式,注意用绝对相用和相对引用 其余单元格就可以直接复制公式填充了 参考技术D 如果你所说的表每一科的成绩都是按学号顺序排的,并且所有同学的语文成绩在一块,数学成绩在一块,(也就是说一科的成绩排完了以后再排的下一科的成绩)那就很好办。你以前的表就是一张横式的表,想办法把它改成竖式的表就行了。1、整个表先不要动,先在“成绩”后面空着的三列依次输入语文、英语、数学。2、再把以前表中“全班的语文成绩”全部选中,移动到你在“后面输入的~语文”那一列,把以前表中“全班的数学成绩”全部选中,移动到你在“后面输入的~数学”那一列,移动英语成绩的方法也一样。3、第一轮的姓名、学号两排不变,把以前的表“科目、成绩~两例”删除,再把下面“多余的姓名、学号~行”删除,就行了。 第5个回答 2011-09-08 有的回答的好复杂呀!
排序—主要关键字为“科目”,次要为“学号”,选“有标题行”,点“确定”,然后你对应着复制,粘贴吧
得在2个表上操作 ,没改的一个表,改后的单独一个表
1___概述
1.关系型数据库的管理系统:
比如当前有两张表:学生信息表(学号,姓名,性别,身份证号,学院,专业,入学时间),学生成绩表(学号,科目,成绩)我们可以根据一个学生的学号查找到他的某一学科的成绩,即两张表通过学号联系起来,这就是关系型数据库管理系统。本阶段本人主要学习的是(mysql)。
2.Mysql的优势: 免费,开源,跨平台,功能齐全。
3.客户端 / 服务端架构:
服务器的程序直接操作我们存储的数据,我们作为客户端连接到这个服务器程序,并发送增删改查的请求,服务器程序将进行响应,从而操作它维护的数据库。每个客户端都得提供账户,密码后才能登录,登录后才能向服务器发送请求,由服务器来直接操作数据库中的数据。我们在学习时,将服务器和客户端程序都安装到自己的电脑上,使用时先打开服务端,在进行客户端的登录来进行交互。
4.Mysql中的可执行文件:
这里讲一下如何执行这些可执行文件,首先我们可以在CMD中输入这些文件的路径(相对路径,绝对路径),就可以执行。其实这些文件就相当于图形化界面中的一个个图标,鼠标双击就可以执行。当我们觉得在CMD中输入路径太麻烦,可以考虑给这些文件添加快捷方式。Windows中可以把这些文件的Bin目录添加到系统变量的Path中,这时我们直接输入命令名称即可。
一般把MySql注册为Windows的服务,通过net start mysql80 ,net stop mysql80来开启和关闭服务器。
客户端连接服务器命令: mysql -uroot -p1234567890 ,登录成功后,mysql> 代表命令的提示符,我们在这后面添加增删改查的请求,交由服务器去相应。
客户端中断与服务器的连接: mysql> 后面可以添加 quit / exit / (\q) ,这里就将客户端关闭了,而不是关闭服务器。
注意点:
Mysql命令的摆放顺序没有硬性规定;
如果客户端和服务器安装在同一台机器上 -h(客户端连接服务器时的命令参数,表示启动服务器的计算机的域名或者IP地址)可以省略。
以上是关于excel问题:有一张表 姓名 学号 科目 成绩 想变成 姓名 学号 语文 英语 数学 张三 001的主要内容,如果未能解决你的问题,请参考以下文章
用c语言实现一个简单的学生成绩管理系统,包括:学号,姓名,科目,成绩