|
|
各位大神,请看一下我的代码是不是有问题?
- Sub 批量赋分()
- Dim hs As Long '命名一个变量hs
- hs = Shcj.Range("A1000").End(xlUp).Row '判定成绩输入表的行数
- Dim h As Long
- For h = 3 To hs
- nj = Shcj.Cells(h, 1) '年级
- xb = Shcj.Cells(h, 2) '性别
- xm1 = Shcj.Cells(h, 3) '测试项目1
- xm2 = Shcj.Cells(h, 5) '测试项目2
- xm3 = Shcj.Cells(h, 7) '测试项目3
-
- Shcj.Cells(h, 4) = 得分1(nj, xb, xm1) '根据年级、性别、测试项目1写入得分1
- Shcj.Cells(h, 6) = 得分2(nj, xb, xm2) '根据年级、性别、测试项目2写入得分2
- Shcj.Cells(h, 8) = 得分3(nj, xb, xm3) '根据年级、性别、测试项目2写入得分3
- Shcj.Cells(h, 9) = Shcj.Cells(h, 4) * 0.2 + Shcj.Cells(h, 6) * 0.4 + Shcj.Cells(h, 8) * 0.4 '项目1占比20%,项目2占比20%,项目3占比40%汇总写入总分
- Next h
- End Sub
- Function 得分1(nj, xb, xm)
- Set shbz = Sheets(Trim(Str(nj))) '设置shbz为评分标准
- If xb = "男" Then lie = 1 Else lie = 2 '如果是男生则按照第一列查找,否则按照第二列查找
- hangs = shbz.Range("A1000").End(xlUp).Row '判定标准所在的行数
- For i = 4 To hangs '从第4行开始到最后
-
- If xm < shbz.Cells(i, lie) Then '如果输入的成绩小于等于标准所在的行,则按照本行的成绩
- cj = shbz.Cells(i - 1, 3)
- Else: xm = shbz.Cells(i, lie)
- cj = shbz.Cells(i, 3)
- Exit For
- End If
- Next
- 得分1 = cj
- End Function
- Function 得分2(nj, xb, xm)
- Set shbz = Sheets(Trim(Str(nj)))
-
- If xb = "男" Then lie = 4 Else lie = 5
-
- hangs = shbz.Range("A1000").End(xlUp).Row
- For i = 4 To hangs
- If xm < shbz.Cells(i, lie) Then
- cj = shbz.Cells(i - 1, 6)
- Else: xm = shbz.Cells(i, lie)
- cj = shbz.Cells(i, 6)
- Exit For
- End If
- Next
- 得分2 = cj
- End Function
- Function 得分3(nj, xb, xm)
- Set shbz = Sheets(Trim(Str(nj)))
-
- If xb = "男" Then lie = 7 Else lie = 8
-
- hangs = shbz.Range("A1000").End(xlUp).Row
- For i = 4 To hangs
-
- If xm < shbz.Cells(i, lie) Then
- cj = shbz.Cells(i - 1, 9)
- Else: xm = shbz.Cells(i, lie)
- cj = shbz.Cells(i, 9)
- Exit For
-
- End If
- Next
- 得分3 = cj
- End Function
复制代码
|
相关搜索
|