ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求能计算16个文件里的总人数、平均分、及格率的VBA代码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-11-5 11:10 | 显示全部楼层 |阅读模式
由于“双减”政策,不允许为各校老师排名次了,但各校又需要了解每个老师的教学大致情况,需要区级教育部门为各校提供各科成绩的总体情况,以便于参考比照。因此需要我们计算出16个学科里面全区的总体总人数、平均分、及格人数(大于等于59.5的人数)、及格率、优秀人数(大于等于79.5的人数)、优秀率。在文件“三率统计表”中,求一篇能达到此目的的VBA代码,谢谢。

各科总体三率统计.rar

717.42 KB, 下载次数: 14

TA的精华主题

TA的得分主题

发表于 2021-11-5 14:06 | 显示全部楼层
Sub 三率统计()
Application.ScreenUpdating = False
Dim ar As Variant
Dim br()
ReDim br(1 To 1000, 1 To 8)
f = Dir(ThisWorkbook.Path & "\16科期考成绩\*.xls*")
Do While f <> ""
    Set wb = Workbooks.Open(ThisWorkbook.Path & "\16科期考成绩\" & f, 0)
    n = n + 1
    br(n, 1) = wb.Worksheets(1).Name
    ar = wb.Worksheets(1).[a1].CurrentRegion
    wb.Close False
    rs = 0: zf = 0: jg = 0: yx = 0
    For i = 2 To UBound(ar)
        If Trim(ar(i, 6)) <> "" Then
            If IsNumeric(ar(i, 6)) Then
                rs = rs + 1
                zf = zf + ar(i, 6)
                If ar(i, 6) > 59.5 Then
                    jg = jg + 1
                End If
                If ar(i, 6) > 79.5 Then
                    yx = yx + 1
                End If
            End If
        End If
    Next i
    br(n, 2) = rs
    br(n, 3) = zf
    br(n, 4) = zf / rs
    br(n, 5) = jg
    br(n, 6) = jg / rs
    br(n, 7) = yx
    br(n, 8) = yx / rs
f = Dir
Loop
With Sheets("三率统计表")
    .[a1].CurrentRegion.Offset(2) = Empty
    .[a3].Resize(n, 8) = br
End With
MsgBox "ok!"
Application.ScreenUpdating = True
               
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-11-5 14:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Sub 三率统计()
Application.ScreenUpdating = False
Dim ar As Variant
Dim br()
ReDim br(1 To 1000, 1 To 8)
f = Dir(ThisWorkbook.Path & "\16科期考成绩\*.xls*")
Do While f <> ""
    Set wb = Workbooks.Open(ThisWorkbook.Path & "\16科期考成绩\" & f, 0)
    n = n + 1
    br(n, 1) = Left(wb.Name, 2)
    ar = wb.Worksheets(1).[a1].CurrentRegion
    wb.Close False
    rs = 0: zf = 0: jg = 0: yx = 0
    For i = 2 To UBound(ar)
        If Trim(ar(i, 6)) <> "" Then
            If IsNumeric(ar(i, 6)) Then
                rs = rs + 1
                zf = zf + ar(i, 6)
                If ar(i, 6) > 59.5 Then
                    jg = jg + 1
                End If
                If ar(i, 6) > 79.5 Then
                    yx = yx + 1
                End If
            End If
        End If
    Next i
    br(n, 2) = rs
    br(n, 3) = zf
    br(n, 4) = zf / rs
    br(n, 5) = jg
    br(n, 6) = jg / rs
    br(n, 7) = yx
    br(n, 8) = yx / rs
f = Dir
Loop
With Sheets("三率统计表")
    .[a1].CurrentRegion.Offset(2) = Empty
    .[a3].Resize(n, 8) = br
End With
MsgBox "ok!"
Application.ScreenUpdating = True
               
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-11-5 14:09 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-11-8 10:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

感谢侠圣多次修改帮助。经验证,计算正确。但有一个地方如果能改进一下就更好了——计算结果按照一语、一数、二语、二数、三语、三数、三英、四语、四数、四英、五语、五数、五英、六语、六数、六英顺序显示。其他的,平均分、及格率和优秀率保留两位小数,及格人数设定为大于等于59.5的,优秀人数设定为大于等于59.5的,这些我自己会改。再次感谢出手相助!

各科总体三率统计.rar

726.6 KB, 下载次数: 3

TA的精华主题

TA的得分主题

发表于 2021-11-8 16:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 xj123321 于 2021-11-8 16:53 编辑

是这样吗,在3190496160基础上改了下

各科总体三率统计.rar

727.35 KB, 下载次数: 12

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-11-8 17:32 | 显示全部楼层
  1. Sub test()
  2.   Dim r%, i%
  3.   Dim arr, brr(1 To 1000, 1 To 8)
  4.   Dim wb As Workbook
  5.   Dim ws As Worksheet
  6.   Dim mypath$, myname$
  7.   Application.ScreenUpdating = False
  8.   Application.DisplayAlerts = False
  9.   mypath = ThisWorkbook.Path & "\16科期考成绩"
  10.   myname = Dir(mypath & "*.xlsx")
  11.   m = 0
  12.   Do While myname <> ""
  13.     If myname <> ThisWorkbook.Name Then
  14.       xm = Left(myname, 2)
  15.       m = m + 1
  16.       brr(m, 1) = xm
  17.       Set wb = GetObject(mypath & myname)
  18.       With wb
  19.         With .Worksheets(1)
  20.           r = .Cells(.Rows.Count, 1).End(xlUp).Row
  21.           If r > 1 Then
  22.             arr = .Range("a2:f" & r)
  23.             For i = 1 To UBound(arr)
  24.               If Len(arr(i, 6)) <> 0 Then
  25.                 brr(m, 2) = brr(m, 2) + 1
  26.                 brr(m, 3) = brr(m, 3) + arr(i, 6)
  27.                 If arr(i, 6) >= 60 Then
  28.                   brr(m, 4) = brr(m, 4) + 1
  29.                 End If
  30.                 If arr(i, 6) >= 80 Then
  31.                   brr(m, 6) = brr(m, 6) + 1
  32.                 End If
  33.               End If
  34.             Next
  35.           End If
  36.         End With
  37.         .Close False
  38.       End With
  39.     End If
  40.     myname = Dir
  41.   Loop
  42.   If m = 0 Then
  43.     MsgBox "没有符合条件数据!"
  44.     Exit Sub
  45.   End If
  46.   For i = 1 To m
  47.     brr(i, 8) = InStr("一二三四五六", Left(brr(i, 1), 1)) * 10 + InStr("语数英", Right(brr(i, 1), 1))
  48.     If Len(brr(i, 2)) <> 0 And brr(i, 2) <> 0 Then
  49.       brr(i, 3) = Round(brr(m, 3) / brr(i, 2), 2)
  50.       brr(i, 5) = Round(brr(i, 4) / brr(i, 2), 4)
  51.       brr(i, 7) = Round(brr(i, 6) / brr(i, 2), 4)
  52.     End If
  53.   Next

  54.   With Worksheets("三率统计表")
  55.     .UsedRange.Offset(2, 0).Clear
  56.     .Range("e:e,g:g").NumberFormatLocal = "0.00%"
  57.     .Range("a3").Resize(m, UBound(brr, 2)) = brr
  58.     .Range("a3").Resize(m, UBound(brr, 2)).Sort key1:=.Range("h3"), order1:=xlAscending, Header:=xlNo
  59.     .Columns(8).Clear
  60.     With .Range("a1")
  61.       With .Font
  62.         .Name = "微软雅黑"
  63.         .Size = 18
  64.       End With
  65.     End With
  66.     With .Range("a2").Resize(1 + m, 7)
  67.       .Borders.LineStyle = xlContinuous
  68.       With .Font
  69.         .Name = "微软雅黑"
  70.         .Size = 11
  71.       End With
  72.     End With
  73.     .Rows(1).RowHeight = 30
  74.     .Rows(2).Resize(1 + m).RowHeight = 20
  75.     With .UsedRange
  76.       .HorizontalAlignment = xlCenter
  77.       .VerticalAlignment = xlCenter
  78.     End With
  79.   End With
  80. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-11-8 17:34 | 显示全部楼层
本帖最后由 chxw68 于 2021-11-8 19:15 编辑

很长时间没有写成绩分析代码了,练练手。补充:根据楼下网友提醒,修改了其中的错误。

各科总体三率统计.rar

728.77 KB, 下载次数: 33

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-11-8 17:49 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 xj123321 于 2021-11-8 18:44 编辑
chxw68 发表于 2021-11-8 17:34
很长时间没有写成绩分析代码了,练练手。

禇老师出手,格式完美,平均分有问题,    brr(i, 3) = Round(brr(i, m) / brr(i, 2), 2)应为    brr(i, 3) = Round(brr(i, 3) / brr(i, 2), 2)

各科总体三率统计.rar

725.77 KB, 下载次数: 9

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-11-8 18:52 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-20 17:14 , Processed in 0.054556 second(s), 22 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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