ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 体育测试评分

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-12-24 10:09 | 显示全部楼层 |阅读模式
“测试结果”表是根据褚老师的代码修改的(https://club.excelhome.net/thread-1680066-1-1.html),基本能实现评分功能,但数据粘贴比较麻烦,因此就改了一下表格,见“调整后”表。调整了表格之后,代码不会修改了。请各位高手帮个忙。


我的需求:
1. 用VBA计算出各项目得分和等级
2. 表中的体重指标和长跑加分数据需要通过计算得出,能否用VBA得出
3. 有三个评分标准,因为标准不一样,放在三个表中,能否放在一个表中
4. 统计表用VBA得出
5.一次性得出结果或分步得出都行
图片.png

体育测试评分表.rar (272.71 KB, 下载次数: 15)

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-12-24 19:39 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
各位大佬,帮忙解决。谢谢。

TA的精华主题

TA的得分主题

发表于 2023-12-25 03:05 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-12-25 07:21 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-12-25 09:52 | 显示全部楼层
加分及后面的计算没有看明白。

体育测试评分表.rar

278.1 KB, 下载次数: 12

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-12-25 19:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
chxw68 发表于 2023-12-25 09:52
加分及后面的计算没有看明白。

感谢褚老师。加分说明下图,附件中也有说明。现在的需求就是:①首先计算出三个值:通过身高和体重计算出体重指数,计算长跑成绩与对应的最高成绩的差值,计算引体/仰卧成绩与对应的最高成绩的差值;②将各项成绩对比标准得出评分和等级;③将各项评分和相应的权重得出总成绩和等级;④最后进行统计
长跑加分说明.png

体育测试评分表(含加分说明).rar (288.5 KB, 下载次数: 4)
引体仰卧加分说明.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-12-25 19:19 | 显示全部楼层
liulang0808 发表于 2023-12-25 07:21
https://club.excelhome.net/forum.php?mod=viewthread&tid=1680066
看看是否可以参考下

谢谢,就是参考这个帖子。但需求有所变化。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-12-25 19:22 | 显示全部楼层
xsy我可以很好 发表于 2023-12-25 03:05
体育测试成绩自动评分
https://club.excelhome.net/thread-1627313-1-1.html
(出处: ExcelHome技术论坛)
...

谢谢。看过该贴,但我无法修改成我的需求。

TA的精华主题

TA的得分主题

发表于 2023-12-26 09:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. Sub test5()
  2.     Dim r%, i%
  3.     Dim arr, brr
  4.     Dim d As Object
  5.     Dim reg As New RegExp
  6.     Set d = CreateObject("scripting.dictionary")
  7.     Application.ScreenUpdating = False
  8.     Application.DisplayAlerts = False
  9.     With reg
  10.         .Global = False
  11.         .Pattern = "(\d+)′(\d+)"
  12.     End With

  13.     For Each ws In Worksheets(Array("评分标准", "加分标准", "体重标准"))
  14.         Set d(ws.Name) = CreateObject("scripting.dictionary")
  15.         With ws
  16.             r = .Cells(.Rows.Count, 1).End(xlUp).Row
  17.             c = .Cells(4, .Columns.Count).End(xlToLeft).Column
  18.             brr = .Range("a1").Resize(r, c)
  19.             d(ws.Name)(1) = brr
  20.             For j = 4 To UBound(brr, 2)
  21.                 If Len(brr(1, j)) <> 0 Then
  22.                     dx = brr(1, j)
  23.                 End If
  24.                 If Len(brr(2, j)) <> 0 Then
  25.                     xm = brr(2, j)
  26.                 End If
  27.                 If Len(brr(3, j)) <> 0 Then
  28.                     nj = brr(3, j)
  29.                 End If
  30.                 xx = nj & "+" & xm & "+" & brr(4, j)
  31.                 d(ws.Name)(xx) = Array(j, dx)
  32.             Next
  33.         End With
  34.     Next


  35.     With Worksheets("调整后")
  36.         .AutoFilterMode = False
  37.         r = .Cells(.Rows.Count, 1).End(xlUp).Row
  38.         .Range("h2:h" & r).ClearContents
  39.         .Range("o2:aj" & r).ClearContents
  40.         
  41.         arr = .Range("a1:aj" & r)

  42.         brr = d("评分标准")(1)
  43.         For i = 2 To UBound(arr)
  44.             arr(i, 8) = Application.Round(arr(i, 7) / (arr(i, 6) / 100) ^ 2, 1)
  45.             sj1 = 0
  46.             sj2 = 0
  47.             Set mh = reg.Execute(arr(i, 13))
  48.             If mh.Count > 0 Then
  49.                 sj1 = Val(mh(0).SubMatches(0)) * 60 + Val(mh(0).SubMatches(1))
  50.             End If
  51.             xx = arr(i, 2) & "+长跑+" & arr(i, 5)
  52.             If d("评分标准").exists(xx) Then
  53.                 crr = d("评分标准")(xx)
  54.                 Set mh = reg.Execute(brr(5, crr(0)))
  55.                 If mh.Count > 0 Then
  56.                     sj2 = Val(mh(0).SubMatches(0)) * 60 + Val(mh(0).SubMatches(1))
  57.                 End If
  58.                 If sj2 > sj1 Then
  59.                     arr(i, 29) = sj2 - sj1
  60.                 End If
  61.             End If
  62.             arr(i, 31) = arr(i, 14)
  63.         Next

  64.         For j = 9 To 14
  65.             For i = 2 To UBound(arr)
  66.                 xx = arr(i, 2) & "+" & arr(1, j) & "+" & arr(i, 5)
  67.                 If d("评分标准").exists(xx) Then
  68.                     crr = d("评分标准")(xx)
  69.                     If crr(1) = "大" Then
  70.                         For k = 5 To UBound(brr)
  71.                             If arr(i, j) >= brr(k, crr(0)) Then
  72.                                 arr(i, j * 2 - 1) = brr(k, 3)
  73.                                 Exit For
  74.                             End If
  75.                         Next
  76.                     Else
  77.                         For k = 5 To UBound(brr)
  78.                             If arr(i, j) <= brr(k, crr(0)) Then
  79.                                 arr(i, j * 2 - 1) = brr(k, 3)
  80.                                 Exit For
  81.                             End If
  82.                         Next
  83.                     End If
  84.                 End If
  85.             Next
  86.         Next
  87.         brr = d("体重标准")(1)
  88.         For i = 2 To UBound(arr)
  89.             xx = arr(i, 2) & "+体重指数+" & arr(i, 5)
  90.             If d("体重标准").exists(xx) Then
  91.                 crr = d("体重标准")(xx)
  92.                 For k = 5 To UBound(brr)
  93.                     If arr(i, 8) >= brr(k, crr(0)) Then
  94.                         arr(i, 15) = brr(k, 3)
  95.                         Exit For
  96.                     End If
  97.                 Next
  98.             End If
  99.         Next

  100.         brr = d("加分标准")(1)
  101.         For j = 29 To 31 Step 2
  102.             For i = 2 To UBound(arr)
  103.                 If Len(arr(i, j)) <> 0 And arr(i, j) <> 0 Then
  104.                     xx = arr(i, 2) & "+" & arr(1, j) & "+" & arr(i, 5)
  105.                     If d("加分标准").exists(xx) Then
  106.                         crr = d("加分标准")(xx)
  107.                         For k = 5 To UBound(brr)
  108.                             If arr(i, j) >= brr(k, crr(0)) Then
  109.                                 arr(i, j + 1) = brr(k, 3)
  110.                                 Exit For
  111.                             End If
  112.                         Next
  113.                     End If
  114.                 End If
  115.             Next
  116.         Next

  117.     End With

  118.     For i = 2 To UBound(arr)
  119.         arr(i, 33) = arr(i, 15) * 0.15 + arr(i, 17) * 0.15 + arr(i, 19) * 0.2 + arr(i, 21) * 0.1 + arr(i, 23) * 0.1 + arr(i, 25) * 0.2 + arr(i, 27) * 0.1
  120.         arr(i, 34) = arr(i, 30) + arr(i, 32)
  121.         arr(i, 35) = arr(i, 33) + arr(i, 34)
  122.         For Each y In Array(15, 17, 19, 21, 23, 25, 27, 35)
  123.             Select Case arr(i, y)
  124.                 Case Is >= 90
  125.                     arr(i, y + 1) = "优秀"
  126.                 Case Is >= 80
  127.                     arr(i, y + 1) = "良好"
  128.                 Case Is >= 60
  129.                     arr(i, y + 1) = "及格"
  130.                 Case Else
  131.                     arr(i, y + 1) = "不及格"
  132.             End Select
  133.         Next
  134.     Next

  135.     With Worksheets("调整后")
  136.         .Range("a1").Resize(UBound(arr), UBound(arr, 2)) = arr
  137.     End With
  138. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2023-12-26 09:37 | 显示全部楼层
详见附件。

体育测试评分表.rar

283.41 KB, 下载次数: 16

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-6-26 17:23 , Processed in 0.044533 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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