Просто мысли на @zedfoxus пост
ОДНОЛИНЕЙНАЯ сослагательного наклонения не нужно положить конец, если
Sub Grade()
Dim Average As Double
Dim i As Long
i = 3
Do Until IsEmpty(Cells(i, 7))
Average = Cells(i, 6).Value
Average = Average * 100
If (Average < 60) Then Cells(i, 7).Value = ("E")
If (Average < 70) Then Cells(i, 7).Value = ("D")
If (Average < 80) Then Cells(i, 7).Value = ("C")
If (Average < 90) Then Cells(i, 7).Value = ("B")
If (Average < 100) Then Cells(i, 7).Value = ("A")
i = i + 1
Loop
End Sub
В дополнение к этому, хотя, вот мое взятие на проблема. Я собрал сжатую рутину с использованием 2-мерного массива и воспользовался функцией Vlookup на рабочем листе. Это работает, потому что он будет найти ближайшую вещь (полезно, когда вы используете диапазоны номеров)
Sub Grade()
Dim Average As Double, i As Long, MyArr As Variant
MyArr = Array(Array(60, "E"), Array(70, "D"), Array(80, "C"), Array(90, "B"), Array(100, "A"))
i = 3
Do Until IsEmpty(Cells(i, 7))
Average = Cells(i, 6).Value * 100 'Why * 100? Anyway just copied what you have done in your code
Cells(i, 7).Value = Application.WorksheetFunction.VLookup(Average, MyArr, 2)
i = i + 1
Loop
End Sub
И, наконец, потому что Средние переменный используются только один раз, это на самом деле не нужно быть там (в то время как ему можно было бы утверждать то же самое для MyArr, что он будет слишком раздутым, чтобы включить его в Vlookup, это будет трудно читать), вы можете удалить его и просто ссылаться на его состав в Vlookup, чтобы конденсировать код дальше, и, наконец, мы можем удалить i=3
и i=i+1
, используя для следующего цикла опроса и до последней строки данных следующим образом:
Sub Grade()
Dim i as long, MyArr As Variant
MyArr = Array(Array(60, "E"), Array(70, "D"), Array(80, "C"), Array(90, "B"), Array(100, "A"))
For i = 3 To Range("G" & Rows.Count).End(xlUp).Row
Cells(i, 7).Value = Application.WorksheetFunction.VLookup(Cells(i, 6).Value * 100, MyArr, 2)
Loop
End Sub
I A m не уверен, почему вы умножаетесь на 100, и у меня нет данных теста. Я сделал свои собственные тестовые данные, но пришлось удалить * 100, чтобы заставить его работать, мои данные были в колонке F.
40
50
60 E
65 E
70 D
75 D
80 C
85 C
90 B
95 B
100 A
Это код, который я использовал:
Sub Grade2()
Dim i As Long, MyArr As Variant
MyArr = Array(Array(60, "E"), Array(70, "D"), Array(80, "C"), Array(90, "B"), Array(100, "A"))
For i = 3 To Range("F" & Rows.Count).End(xlUp).Row
Cells(i, 7).Value = Application.WorksheetFunction.VLookup(Cells(i, 6).Value, MyArr, 2)
Next
End Sub
вы имеете в виду 'ElseIf'? – bansi
В какой момент вы присваиваете значение 'Average'? – DeanOC
Сделал некоторые изменения. Я получил новую ошибку. Loop without Do – Duraholiday