Я пытаюсь создать электронную таблицу, которая автоволшебно дает класс студенту на основе их меток, которые они получили.
Я, по-видимому, поразил вложенный предел оператора IF Excel, который равняется 7.
Вот мой если оператор:
=IF(O5>0.895,"A+",IF(O5>0.845,"A",IF(O5>0.795,"A-",IF(O5>0.745,"B+",IF(O5>0.695,"B",IF(O5>0.645,"B-",IF(O5>0.595,"C+",IF(O5>0.545,"C","D"))))))))
Я читал онлайн, что мог создать сценарий VBA и присвоить его, который, но я ничего не знаю о VBA.... поэтому, если бы кто-то мог бы помочь мне записать VBA для этого, был бы потрясающим.
Его все еще пропавшие без вести класса C-и что-либо ниже должно быть награждено меткой D.
Это - схема классификации, которую я пытаюсь создать...:
+ 89.500 - 100.000 передачи с отличием
84.500 - 89.490 передач с отличием
A-79.500 - 84.490 передачи с отличием
B + 74.500 - 79.490 передач с заслугой
B 69.500 - 74.490 передачи с заслугой
B-64.500 - 69.490 передач с заслугой
C + 59.500 - 64.490 передачи
C 54.500 - 59.490 передач
C-49.500 - 54.490 передачи
D 0.000 - 49.490 указанных сбоев
Я не возражал бы спускаться по маршруту VBA, однако мое понимание языка VB абсолютно минимально (не любите его)..., если это становится слишком утомительным, я думал для создавания маленького php/mysql приложения вместо этого.
Решение ВПР кажется лучшим. Чтобы добавить сценарий VBA, вы можете вызвать панель инструментов Visual Basic, добавить элемент управления, например кнопку, а затем дважды щелкнуть его. Код этого события открывается в среде Excel VBA. Там вы могли бы добавить код на VB, возможно, что-то вроде этого.
Private Sub CommandButton1_Click()
Cells(1, 2) = getValue(Cells(1, 1))
End Sub
Private Function getValue(ByVal argMarks As Double)
If argMarks > 89.5 And argMarks <= 100 Then
getValue = "A+"
If argMarks > 84.5 And argMarks <= 89.49 Then
getValue = "A"
.
.
and so on...
End Function
Вы можете сделать это гораздо более элегантно с помощью формулы VLOOKUP
, сделав отдельные таблицы, отображающие нижние границы букв. Таблица сопоставления должна быть отсортирована по возрастанию номера класса.
Например:
A B 0 D 49.5 C- 54 C 59.5 C+ ... ...
=VLOOKUP(SomeCell, $A$1:$B$9, 2, TRUE)
Где $ A $ 1: $ B $ 9
- это диапазон с таблицей оценок. (Знаки $
говорят Excel не перемещать ссылку при копировании формулы).
Передача TRUE
в качестве последнего аргумента заставит Excel выполнить двоичный поиск, чтобы найти значение, которое (пока данные отсортированы) является именно тем, что вы хотите делать.
Простым решением было бы просто разделить формулу на две ячейки
=IF(O5>0.895,"A+",IF(O5>0.845,"A",IF(O5>0.795,"A-",<Other cell ref here>)))
Другая ячейка:
=IF(O5>0.745,"B+",IF(O5>0.695,"B",IF(O5>0.645,"B-",IF(O5>0.595,"C+",IF(O5>0.545,"C","D")))))