求助大神,帮忙讲解一下这道题
vba吧
全部回复
仅看楼主
level 3
答题要求:
进入VBE后,按要求建立用户窗体和相应的模块以满足题目要求的功能。
图1. 学生英语考试成绩工作表
要求设计一个名为成绩统计的用户窗体,窗体结构如图2。
图2. 成绩统计窗体
窗体运行时,单击“成绩统计”按钮后,按每10分一个分数段统计每个分数段的人数、百分比,并将统计结果输出显示在一张新建的名为“分段成绩统计表”的工作表上,如图3。最后将不及格人数,不及格率,优秀人数,优秀率统计数据显示在窗体,如图4。
图3.分段成绩统计表
2017年06月19日 02点06分 1
level 3

2000级新生英语入学考试
学号 姓名 总分
1010137 孙泉高 96
1010313 杜金兰 92
1010118 孙文渊 91
1010236 吴明娟 91
1010218 李宜燕 89
1010238 吴银墀 89
1010427 孙祥玉 89
1010216 王永寿 88
1010117 杜国芳 87
1010213 王启凤 87
1010215 王国政 87
1010301 王自重 87
1010413 郑少图 86
1010416 陶树杰 86
1010418 杜文悠 86
1010136 钱素芳 84
1010201 王正英 84
1010306 张跃耕 84
1010307 李谷卉 84
1010333 李克珍 84
1010417 李 琪 84
1010438 杜淮清 82
1010138 杜必琼 80
1010302 王绍先 80
1010309 王广惠 80
1010311 王少梅 80
1010335 张兆珍 80
1010115 李义辉 79
1010308 吴永华 79
1010319 杜有达 79
1010405 李佩琦 79
1010122 李洪秀 78
1010304 吴美英 78
1010317 张玉碧 78
1010105 杜大华 77
1010220 周国祯 77
1010316 郑三群 77
1010336 杜满芳 77
1010410 张才丽 77
1010412 孙世华 77
1010419 张佃坤 77
1010436 周瑞英 77
1010106 李受珊 76
1010202 钱芬业 75
1010401 周世清 75
1010433 王常福 75
1010134 吴洪友 74
1010203 钱玉富 74
1010205 张仁秀 74
1010334 李玉珍 74
1010108 杜 勤 73
1010130 李铭英 73
1010204 张凤堂 73
1010237 周昌碧 73
1010318 王美珍 73
1010435 周常福 73
1010114 杜朝先 72
1010224 张为伟 72
1010326 王荣群 72
1010406 孙世婷 72
1010207 钱昌礼 71
1010219 王怀先 71
1010223 张恕萍 71
1010321 钱仕珏 71
1010332 李爱梅 71
1010422 吴立达 71
1010126 杜梦莉 70
1010206 钱仁秀 70
1010323 吴仁忠 70
1010402 张学芳 70
1010423 周青云 70
1010429 李光芬 70
1010119 陶佐贤 69
1010231 郑文妙 69
1010104 孙信才 68
1010212 王 锋 68
1010403 王必云 68
1010303 李克随 67
1010315 王三群 67
1010439 李莹洁 67
1010121 杜丰菊 66
1010123 孙致天 66
1010214 吴佑黔 66
1010221 钱尤奎 66
1010329 钱吉芳 66
1010407 杜天碧 66
1010411 周世钦 66
1010425 王国芸 66
1010230 王继昭 65
1010312 张金兰 65
1010327 孙维珍 65
1010125 吴锡元 64
1010239 孙宗干 64
1010409 周才丽 64
1010129 杜如根 63
1010131 杜玉美 63
1010217 陶惠章 63
1010229 钱湘琳 63
1010103 吴善荣 62
1010314 张训芳 62
1010133 李有度 61
1010324 孙成珍 61
1010112 张文然 60
1010227 钱明卉 59
1010420 李佃坤 59
1010428 钱德发 59
1010135 陶翠华 58
1010233 王企祥 58
1010222 郑恕萍 57
1010240 王国理 57
1010424 孙青云 57
1010109 孙 勤 56
1010208 王春秀 56
1010320 郑鸣岐 56
1010328 陶淑华 56
1010414 王明仪 56
1010120 郑光惠 55
1010225 钱之美 55
1010113 周淑文 54
1010211 李大均 54
1010234 钱成华 54
1010132 杜筱萍 53
1010124 王锡元 51
1010128 张如根 50
1010310 钱蕴玖 50
1010430 陶昌碧 50
1010415 王雪玲 49
1010209 李淑容 48
1010210 吴懋兰 48
1010330 李吉芳 48
1010404 钱应芳 48
1010331 钱吉芳 47
1010110 王受田 46
1010140 孙世碧 46
1010232 郑永华 46
1010421 钱国芝 46
1010127 周天玉 45
1010408 张志昌 45
1010426 孙曼珍 44
1010305 郑启志 43
1010226 钱运贞 41
1010116 杜天明 38
1010431 钱泽珍 35
1010111 陶培华 30
1010339 郑绍文 30
2017年06月19日 03点06分 3
你这分数达到多少为优秀?
2017年06月19日 07点06分
@wujanhong 比如,60-70 70-80 -80-90 90-100分为 及格,一般,合格,优秀?
2017年06月19日 07点06分
@wujanhong 90~100优秀,60以上及格
2017年06月19日 09点06分
还有答案吗?
2019年06月10日 04点06分
level 6
图一
图二
图三
图四
图五
1、在数据表内画一按钮(图一例 ),打开VBA在建一模块或在sheet1里写上如下代码:
Sub 统计()
成绩统计.Show
End Sub
2、在数据表中把刚画的按键引用这个“统计"宏(图2例)
3、在VBA中建立一个窗口按画出如(图3例)
4、双击成绩统计按钮进入VBA代码窗口复制一下代码,删除头尾一行重复代码。
5、完成后点击统计成绩按钮,弹出窗口,点击成绩统计如(图5例)
Private Sub CommandButton1_Click()
Dim n&, bjg%, yx%, a%, b%, c%, d%, e%, f%, g%, h%, i1%, j%
n = Application.CountA([a:a])
For i = 2 To n
If Cells(i, 3).Value <= 10 Then '统计0-10人之间人数
a = a + 1
ElseIf Cells(i, 3).Value > 10 And Cells(i, 3).Value <= 20 Then '统计11-20人之间人数
b = b + 1
ElseIf Cells(i, 3).Value > 20 And Cells(i, 3).Value <= 30 Then '统计21-30人之间人数
c = c + 1
ElseIf Cells(i, 3).Value > 30 And Cells(i, 3).Value <= 40 Then '统计31-40人之间人数
d = d + 1
ElseIf Cells(i, 3).Value > 40 And Cells(i, 3).Value <= 50 Then '统计41-50人之间人数
e = e + 1
ElseIf Cells(i, 3).Value > 50 And Cells(i, 3).Value <= 60 Then '统计51-60人之间人数
f = f + 1
ElseIf Cells(i, 3).Value > 60 And Cells(i, 3).Value <= 70 Then '统计61-70人之间人数
g = g + 1
ElseIf Cells(i, 3).Value > 70 And Cells(i, 3).Value <= 80 Then '统计71-80人之间人数
h = h + 1
ElseIf Cells(i, 3).Value > 80 And Cells(i, 3).Value <= 90 Then '统计81-90人之间人数
i1 = i1 + 1
ElseIf Cells(i, 3).Value >= 90 Then
j = j + 1
End If
'=====================================================================================================
If Cells(i, 3).Value < 60 Then '统计小于60分不及格的人数
bjg = bjg + 1
ElseIf Cells(i, 3).Value >= 60 And Cells(i, 3).Value < 90 Then
yx = yx + 1 '统计60分以上及格的人数
End If
'=====================================================================================================
Next '循环结束
'=======================================================================================================
Label5.Caption = "0-10分:" & a & "人;" & " " & "11-20分:" & b & "人;" & " " & "21-30分:" & c & "人;" & Chr(10) _
& "31-40分:" & d & "人;" & " " & "41-50分:" & e & "人;" & " " & "51-60分:" & f & "人;" & Chr(10) _
& "61-70分:" & g & "人;" & " " & "71-80分:" & h & "人;" & " " & "81-90分:" & i1 & "人;" & Chr(10) _
& "90-100分:" & j & "人;" '以上是显示出每个分段人数有多少人
'=========================================================================================================
i = i - 2
TextBox1.Text = bjg '显示不及格人数
TextBox2.Value = Round(Val(bjg / i * 100), 2) & "%" '统计不及格率
TextBox3.Text = j '显示90分以上人数
TextBox4.Text = Round(Val(j / i * 100), 2) & "%" '统计90分以上的优秀率
TextBox6.Text = yx '统计及格率60-90之间的
TextBox5.Text = Round(Val(yx / i * 100), 2) & "%" '统计及格率60-90及格率
End Sub
2017年06月19日 12点06分 7
不是最好的!但能解决问题!这个在数据超过10000后,运行速度会超级慢!效率很低!
2017年06月20日 22点06分
数据多了恳定会慢,这只针对数据量不大的。这个题应该不会超你说的那么多行数据。要达到你说的那就用数组略快点。
2017年06月22日 10点06分
为啥运行错误了呢?
2018年06月08日 08点06分
你光复制代码上云,窗口建立的对不对呢?
2018年06月08日 16点06分
level 7
楼主加一下微信
18710811000
3,微信你!
2017年06月19日 23点06分 8
兄弟,微信多几位吧
2018年06月18日 16点06分
level 1
楼主,求此题答案,谢谢!!
2018年06月11日 10点06分 10
@zry2002805 已发
2022年05月29日 08点05分
兄弟,你那个能给我一份吗 [哈哈]
2018年06月18日 16点06分
@肥肥肥喆♀ 你也是那个什么财经学院的吗?好多人在要,交作业啊。
2018年06月18日 21点06分
@qianboccp 对啊[泪][泪]
2018年06月18日 22点06分
level 1
楼楼,你有答案了吗[乖],有的话能发我一份吗
2018年06月16日 14点06分 11
level 2
楼主,请问你有答案了吗,求分享!
2018年06月20日 01点06分 12
level 11
可以做,一步一步按要求写程序
2018年06月26日 10点06分 13
level 1
楼主,答案还在吗?求作业,快交了,快哭了,能给我发一份吗?谢谢!
2019年06月06日 12点06分 14
level 1
发我一份[email protected]
2019年06月12日 11点06分 15
level 8
Sub test()
Dim arr()
num = ThisWorkbook.Sheets("sheet1").Range("A65536").End(xlUp).Row
ReDim arr(1 To 10, 1 To num, 1 To 3)
With ThisWorkbook.Sheets("sheet1")
For i = 2 To num
Select Case .Cells(i, 3)
Case 0 To 10
num_1 = num_1 + 1
For n = 1 To 3
arr(1, num_1, n) = .Cells(i, n)
Next
Case 11 To 20
num_2 = num_2 + 1
'........
End Select
Next
End With
End Sub
’num_1至num_10数据就已经可以满足上述要求,但这样没什么实用性,将对应数据存入数组,后期也可以把各分段(合格、不合格、优秀等)的学号及姓名输出
2021年06月15日 02点06分 16
level 1
楼主再求下答案,ball ball 了
2021年06月18日 07点06分 17
你这不就是学生的作业吗?
2021年06月20日 07点06分
level 5
这道题使用for next当然是没效率了,直接用application.worksheetfunction.countifs就好了
举个例
Set ws = ActiveSheet
A71to80 = Application.WorksheetFunction.CountIfs(ws.Range("C:C"), ">70", ws.Range("C:C"), "<80")
其它的应该知道怎么算了吧?
2021年06月22日 09点06分 18
[大拇指]
2021年06月22日 11点06分
level 7
过于复杂了
2022年05月27日 06点05分 20
level 5
答案不都写了还一群人说不会要答案?现在学生都只会一字不差的抄答案了?
2022年06月05日 03点06分 21
1 2 尾页