我正在尝试提取数字等级值并将它们转换为一个字符串,该字符串将代表等级,A > 90,B > 80,等等。我计划使用 for 循环从电子表格中收集值,然后使用 if then 语句来分配字母名称。这是我到目前为止的代码。
For i = 1 To 11
' Pull Grade numerical value
Grade = Cells(2 + i, 16).Value
' Assign Numerical Value a script Grade
If Grade > 60 Then
Letter = "D"
If Grade > 70 Then
Letter = "C"
If Grade > 80 Then
Letter = "B"
If Grade > 90 Then
Letter = "A"
Else
Letter = "F"
Exit
' Print the letter grade
Cells(2 + i, 17).Text = Letter
Next i
Run Code Online (Sandbox Code Playgroud)
我不断收到与“退出”或“下一个 i”有关的错误。我也尝试过使用“End”语句,但这也没有解决问题。
或者只是在 Q 列中使用公式:
=IF(P:P>=90,"A",IF(P:P>=80,"B",IF(P:P>=70,"C",IF(P:P>=60,"D","F"))))
Run Code Online (Sandbox Code Playgroud)
所以它会自动更新,你不需要使用 VBA。
或者,您可以添加GradeList使用以下数据命名的工作表
并使用
=INDEX(GradeList!B:B,MATCH(P:P,GradeList!A:A,1))
Run Code Online (Sandbox Code Playgroud)
作为公式。这样您以后可以轻松地编辑数字/成绩,它会自动选择正确的成绩:
在这种情况下,我更喜欢Select Case。并从 3 开始循环,这样您就不需要添加 2:
For i = 3 To 11
' Pull Grade numerical value
Grade = Cells(i, 16).Value
' Assign Numerical Value a script Grade
Select Case Grade
Case Is >= 90: letter = "A"
Case Is >= 80: letter = "B"
Case Is >= 70: letter = "C"
Case Is >= 60: letter = "D"
Case Else: letter = "F"
End Select
' Print the letter grade
Cells(i, 17).Value = letter
Next i
Run Code Online (Sandbox Code Playgroud)
小智 5
每个人都给出了很好的答案,但很惊讶没有看到Select...Case这里提到的。这是一个完美的例子,甚至可能是教科书。
Select...Case 根据许多标准评估变量,然后执行 case 语句中写入的任何内容。
所以你的代码看起来像这样:
For i = 3 To 13
' Pull Grade numerical value
Grade = Worksheets("YourSheetNameHere").Cells(i, 16).Value 'Change that sheet name
'do our evaluation based on "grade"
Select Case Grade
Case >= 90
Letter = "A"
Case >= 80
Letter = "B"
Case >= 70
Letter = "C"
Case >= 60
Letter = "D"
Case Else
Letter = "F"
End Select
Next i
Run Code Online (Sandbox Code Playgroud)