在 Microsoft VBA 的“for”循环中使用“if then”语句

Aus*_*n G 4 excel vba

我正在尝试提取数字等级值并将它们转换为一个字符串,该字符串将代表等级,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”语句,但这也没有解决问题。

Pᴇʜ*_*Pᴇʜ 7

或者只是在 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)

作为公式。这样您以后可以轻松地编辑数字/成绩,它会自动选择正确的成绩:

在此处输入图片说明


Zwe*_*enn 6

在这种情况下,我更喜欢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)

  • 很好的答案,但正如马特·克里门斯指出的那样,你已经陷入了与OP相同的陷阱。重要的是,您首先从最大的数字开始,否则第一个条件对于 60 以上的所有内容都将解析为 TRUE,并且它们都将得到“D”。 (2认同)

小智 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)