ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

跪求一段VBA代码?谢谢!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-6-7 10:10 | 显示全部楼层 |阅读模式
本帖最后由 cdhgwz 于 2018-6-7 10:13 编辑

在多个班级中找学生总分最大值,然后按大到小顺序,放在“全校榜”中,如果7.1两名学生总分相同,学号小的在前,其他班级同前;如果7.1、7.2总分相同,7.1学生放在前面!其他班级类同。再谢谢!!

七年级考试统计.rar

22.99 KB, 下载次数: 4

TA的精华主题

TA的得分主题

发表于 2018-7-5 13:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
排序功能使用Recordset来实现相对比较容易,详细代码如下:

Option Explicit
Sub StudentRankByGrades()
    '创建Recordset
    Dim rs As New ADODB.Recordset
    Dim i, j As Integer
    Dim fields
    fields = Array("学号", "班次", "姓名", "语文", "英语", "数学", "总分", "班排名", "校排名")
    '定义字段
    Dim s As Variant
    For Each s In fields
        If s = "姓名" Then
            rs.fields.Append s, adVariant
        Else
            rs.fields.Append s, adInteger
        End If
    Next
    rs.Open

    '将数据插入到Recordset中
    Dim data
    For i = 1 To 4 Step 1
        data = Range(Sheets(i).Cells(5, 1), Sheets(i).Cells(Sheets(i).UsedRange.Rows.Count, 9)).Value
        For j = 1 To UBound(data)
            rs.AddNew fields, Application.Transpose(Application.Transpose(Application.Index(data, j, 0)))
        Next
    Next
    '按照要求排序
    rs.Sort = "总分 DESC, 班次 ASC, 学号 ASC"
    rs.MoveFirst
    '分两栏写入排名前100位的同学
    i = 1
    With Sheets(5)
        While Not rs.EOF
            If i > 100 Then
                MsgBox "已完成前100位学生的排名。"
                Exit Sub
            End If
            For j = 1 To 6 Step 1
                If i > 50 Then
                    .Cells(i - 50 + 2, j + 7) = rs.fields(j).Value
                Else
                    .Cells(i + 2, j) = rs.fields(j).Value
                End If
            Next
            If i > 50 Then
                .Cells(i - 50 + 2, 14) = rs.fields(8)
            Else
                .Cells(i + 2, 7) = rs.fields(8)
            End If
            rs.MoveNext
            i = i + 1
        Wend
    End With
    MsgBox "已完成学生的排名。"
End Sub

TA的精华主题

TA的得分主题

发表于 2018-7-5 13:24 | 显示全部楼层
使用ADO Recordset实现数据的排序相对比较简单,详细代码如下:---------------------------------------------------------------------------------------------------------------------------------------------

Option Explicit
Sub StudentRankByGrades()
    '创建Recordset
    Dim rs As New ADODB.Recordset
    Dim i, j As Integer
    Dim fields
    fields = Array("学号", "班次", "姓名", "语文", "英语", "数学", "总分", "班排名", "校排名")
    '定义字段
    Dim s As Variant
    For Each s In fields
        If s = "姓名" Then
            rs.fields.Append s, adVariant
        Else
            rs.fields.Append s, adInteger
        End If
    Next
    rs.Open

    '将数据插入到Recordset中
    Dim data
    For i = 1 To 4 Step 1
        data = Range(Sheets(i).Cells(5, 1), Sheets(i).Cells(Sheets(i).UsedRange.Rows.Count, 9)).Value
        For j = 1 To UBound(data)
            rs.AddNew fields, Application.Transpose(Application.Transpose(Application.Index(data, j, 0)))
        Next
    Next
    '按照要求排序
    rs.Sort = "总分 DESC, 班次 ASC, 学号 ASC"
    rs.MoveFirst
    '分两栏写入排名前100位的同学
    i = 1
    With Sheets(5)
        While Not rs.EOF
            If i > 100 Then
                MsgBox "已完成前100位学生的排名。"
                Exit Sub
            End If
            For j = 1 To 6 Step 1
                If i > 50 Then
                    .Cells(i - 50 + 2, j + 7) = rs.fields(j).Value
                Else
                    .Cells(i + 2, j) = rs.fields(j).Value
                End If
            Next
            If i > 50 Then
                .Cells(i - 50 + 2, 14) = rs.fields(8)
            Else
                .Cells(i + 2, 7) = rs.fields(8)
            End If
            rs.MoveNext
            i = i + 1
        Wend
    End With
    MsgBox "已完成学生的排名。"
End Sub



七年级考试统计.zip

32.35 KB, 下载次数: 1

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

本版积分规则

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

GMT+8, 2024-11-24 04:12 , Processed in 0.040840 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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