You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Excel VBA技术求助:提取成绩前三的学生姓名至指定工作表

解决Excel VBA提取成绩前三学生姓名的问题

我懂这种刚上手VBA时抓瞎的感觉——看了一堆教程还是卡壳,太正常了!针对你要把Sheet1里成绩前三的学生姓名提取到Sheet2 A1:A3的需求,我给你写了一段实用的代码,还会一步步讲清楚怎么用:

需求回顾:在工作表1(Sheet1)的B列录入学生姓名,C列对应录入成绩,需将成绩排名前三的学生姓名显示在工作表2(Sheet2)的A1:A3单元格中。

完整VBA代码

Sub GetTopThreeStudents()
    Dim wsSource As Worksheet, wsTarget As Worksheet
    Dim lastRow As Long
    Dim studentData As Variant
    Dim i As Integer, j As Integer
    
    ' 指定源数据工作表和目标结果工作表
    Set wsSource = ThisWorkbook.Worksheets("Sheet1")
    Set wsTarget = ThisWorkbook.Worksheets("Sheet2")
    
    ' 先清空目标区域的旧数据,避免残留
    wsTarget.Range("A1:A3").ClearContents
    
    ' 获取Sheet1中B列有数据的最后一行(假设第一行是表头,数据从第二行开始)
    lastRow = wsSource.Cells(wsSource.Rows.Count, "B").End(xlUp).Row
    
    ' 做个简单校验:如果学生数量不足3个,弹出提示
    If lastRow < 2 Then
        MsgBox "源数据里至少得有3个学生的成绩呀!", vbExclamation
        Exit Sub
    End If
    
    ' 把姓名和成绩批量读到数组里,比逐个单元格读取效率高
    studentData = wsSource.Range("B2:C" & lastRow).Value
    
    ' 用冒泡排序对数组按成绩降序排列(数据量小,简单好懂)
    Dim tempName As String, tempScore As Double
    For i = LBound(studentData, 1) To UBound(studentData, 1) - 1
        For j = i + 1 To UBound(studentData, 1)
            ' 如果后面的成绩比前面的高,就交换位置
            If studentData(j, 2) > studentData(i, 2) Then
                tempName = studentData(i, 1)
                studentData(i, 1) = studentData(j, 1)
                studentData(j, 1) = tempName
                
                tempScore = studentData(i, 2)
                studentData(i, 2) = studentData(j, 2)
                studentData(j, 2) = tempScore
            End If
        Next j
    Next i
    
    ' 把排名前三的学生姓名写入Sheet2的A1到A3
    For i = 1 To 3
        If i <= UBound(studentData, 1) Then
            wsTarget.Cells(i, "A").Value = studentData(i, 1)
        End If
    Next i
    
    MsgBox "搞定!成绩前三的学生已经提取到Sheet2啦~", vbInformation
End Sub

怎么使用这段代码

  1. 打开你的Excel文件,按下Alt + F11打开VBA编辑器;
  2. 在左侧的项目窗口里,右键点击你的工作簿名称,选择「插入」→「模块」;
  3. 把上面的代码粘贴到新模块的代码窗口里;
  4. 回到Excel界面,按下Alt + F8,在弹出的窗口里选择GetTopThreeStudents,点击「运行」即可。

注意事项

  • 如果你的工作表名称不是Sheet1/Sheet2,记得修改代码里Worksheets("Sheet1")Worksheets("Sheet2")里的名称;
  • 代码默认第一行是表头(比如B1写“学生”,C1写“成绩”),如果你的数据从第一行开始,把代码里的B2:C" & lastRow改成B1:C" & lastRow,同时把If lastRow < 2改成If lastRow < 1

内容的提问来源于stack exchange,提问作者Tim Houdijk

火山引擎 最新活动