ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 820|回复: 6

成绩汇总问题求助,谢谢老师们!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-7-2 18:31 | 显示全部楼层 |阅读模式
修改目标:
1、平时成绩有两个以上表,这个代码只能汇总一个(本来是可以汇总多个的,只是我修改统一了汇总成绩表头,原表表头本不一致)
2、导入成绩表头依次为“成绩1、成绩2、成绩3。。。。”。
3、汇总完成后计算平时成绩平均分数。
4、最后还需要单独另写一个导入期末考试成绩的代码如何写(只有一个表),成绩列表头为“期末成绩”(见实例有个单独的文件夹),这前后学生人有差异,要求把没有的学生补充进来(当然,这部分学生就没有平时成绩了)。
谢谢老师!


汇总成绩实例.rar

42.33 KB, 下载次数: 9

TA的精华主题

TA的得分主题

发表于 2020-7-25 21:23 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
成绩一、成绩二、成绩三是什么意思?你的文件里的平时成绩,每个人也只有一个呀?

TA的精华主题

TA的得分主题

发表于 2020-7-25 21:45 | 显示全部楼层
本帖最后由 相对论R 于 2020-7-26 11:23 编辑

Sub 成绩()

Dim f As Range
MsgBox "请选择您要导入的平时成绩文件"
a = Application.GetOpenFilename("xls,*.xls,xlsx,*.xlsx", 2, , , True)


For i = LBound(a) To UBound(a)
    Set p = GetObject("" & a(i))
    Set q = p.ActiveSheet.UsedRange()
    For j = 2 To q.Range("a65536").End(xlUp).Row
        Set f = Sheet1.Range("C2:C40").Find(q.Range("a" & j).Value)
        If f Is Nothing Then
        Else: f.Offset(0, 2) = q.Range("d" & j)
        End If
    Next
Next

MsgBox "请选择您要导入的期末成绩文件"
b = Application.GetOpenFilename("xls,*.xls,xlsx,*.xlsx", 2, , , True)

x = Sheet1.UsedRange.Rows.Count

For k = LBound(b) To UBound(b)
    Set r = GetObject("" & b(k))
    Set s = p.ActiveSheet.UsedRange()
    For m = 2 To s.Range("a65536").End(xlUp).Row
        Set g = Sheet1.Range("C2:C40").Find(s.Range("a" & m).Value)
        If g Is Nothing Then
            Range("c" & x + 1) = s.Range("a" & m)
            Range("d" & x + 1) = s.Range("b" & m)
            Range("d" & x + 1) = 0
            Range("f" & x + 1) = s.Range("d" & m)
            x = x + 1
        Else: g.Offset(0, 3) = s.Range("d" & m)
        End If
    Next
Next

For n = 2 To Sheet1.UsedRange.Rows.Count
    If Range("e" & n) = "" Then
        Range("e" & n) = 0
    End If
    If Range("f" & n) = "" Then
        Range("f" & n) = 0
    End If
Next

End Sub

先给你写一段代码,这段代码适用于平时成绩和期末成绩都只有一个的情形。

TA的精华主题

TA的得分主题

发表于 2020-7-25 21:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
image.png
运行的时候,主意到右下方可以选择xls或者xlsx文件

TA的精华主题

TA的得分主题

发表于 2020-7-25 22:03 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
楼主的代码 汇总后 同名字的成绩数值,会被第二个文件里数值的覆盖掉。

TA的精华主题

TA的得分主题

发表于 2020-7-25 22:04 | 显示全部楼层
likongshun 发表于 2020-7-25 22:03
楼主的代码 汇总后 同名字的成绩数值,会被第二个文件里数值的覆盖掉。

哦哦明白了,平时成绩会被期末成绩覆盖是不?我写了我的发出来,但是系统还在审核。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-25 22:32 , Processed in 0.032200 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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