ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何根据原始表关键列班级和总分给每班总分成绩后5名学生标记

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-9-28 20:09 | 显示全部楼层 |阅读模式
原始表:关键列,班级,姓名,总分。其中的班排,级排列为测试用,原表中无。

根据关键列,提取总分班级名次后5名(若并列多人,只取5人)到提取记录工作表中。并在原始表中标记列,加上记号两字。 如何根据原始表关键列班级和总分给每班总分成绩后5名学生标记.rar (6.06 KB, 下载次数: 12)

TA的精华主题

TA的得分主题

发表于 2024-9-28 21:16 | 显示全部楼层
供参考...可以使用集算器在生成结果同时修改原文件。
2024-09-28_211449.jpg

TA的精华主题

TA的得分主题

发表于 2024-9-28 22:33 | 显示全部楼层
作业做完就交一下。。。。。

如何根据原始表关键列班级和总分给每班总分成绩后5名学生标记.zip

29.61 KB, 下载次数: 4

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-9-29 00:01 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-9-29 00:04 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
公式做出来 了,你看看
图片5.png

如何根据原始表关键列班级和总分给每班总分成绩后5名学生标记.7z

19.46 KB, 下载次数: 1

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-9-29 09:42 | 显示全部楼层
Sub 筛选标记()
Dim ar As Variant, cr As Variant
Dim i As Long, r As Long, rs As Long
Dim br(), brr()
Dim d As Object
Set d = CreateObject("scripting.dictionary")
With Sheets("原始表")
    r = .Cells(Rows.Count, 1).End(xlUp).Row
    If r < 2 Then MsgBox "原始表为空,请先导入数据!": End
    .Range("h2:h" & r) = Empty
    ar = .Range("a1:h" & r)
    For i = 2 To UBound(ar)
        If ar(i, 1) <> "" Then
            w = ar(i, 1)
            If Not d.exists(w) Then Set d(w) = CreateObject("scripting.dictionary")
            d(w)(i) = ""
        End If
    Next i
    ReDim brr(1 To d.Count * 2, 1 To 6)
    For Each k In d.keys
        n = 0
        ReDim br(1 To UBound(ar), 1 To UBound(ar, 2) + 1)
        m = m + 1
        brr(m, 1) = k & "班"
        For Each kk In d(k).keys
            If ar(kk, 1) <> "" Then
                n = n + 1
                For j = 1 To UBound(ar, 2)
                    br(n, j) = ar(kk, j)
                Next j
                br(n, UBound(br, 2)) = kk
            End If
        Next kk
        For i = 1 To n
            For s = i + 1 To n
                If br(i, 4) > br(s, 4) Then
                    For j = 1 To UBound(br, 2)
                        mk = br(i, j)
                        br(i, j) = br(s, j)
                        br(s, j) = mk
                    Next j
                End If
            Next s
        Next i
        m = m + 1: y = 1
        For s = 1 To 5
            y = y + 1
            brr(m, y) = br(s, 3)
            ar(br(s, 9), 8) = "记号"
        Next s
        brr(m - 1, 2) = y - 1 & "人"
    Next k
    .Range("h1").Resize(UBound(ar), 1) = Application.Index(ar, 0, 8)
End With
With Sheets("标记名单下发")
    .UsedRange = Empty
    .[a1].Resize(m, UBound(brr, 2)) = brr
End With
MsgBox "ok!"
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-9-29 09:42 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-9-29 09:43 | 显示全部楼层
相同分数的究竟是算一个还是算多个,不明确,代码仅供参考

TA的精华主题

TA的得分主题

发表于 2024-9-29 12:46 | 显示全部楼层
3190496160 发表于 2024-9-29 09:43
相同分数的究竟是算一个还是算多个,不明确,代码仅供参考

各种数据库中27年前就陆续 提供各种排名函数,已经成炒了一种标准。
VBA t自1993年推出后,几乎再也没有更新过,什么东西都要自己动手,
例如 各种(分区)排名, 就好像 造车,哪怕一个螺丝、轮子都要自己造。
自己制造螺丝,重复发明轮子,都是极低效率的。
排名函数.png
排名函数年线.png
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-19 04:36 , Processed in 0.036888 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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