Вложенные операторы IF в Excel. - PullRequest
9 голосов
/ 17 марта 2010

Я пытаюсь создать электронную таблицу, которая автоматически оценивает ученика на основании полученных ими оценок.

Я, очевидно, достиг предела вложенного оператора IF в Excel, равного 7.

Вот мое утверждение if:

=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 для этого, было бы здорово.

В нем по-прежнему не хватает С-балла, и все, что ниже, должно быть отмечено знаком D.

Это схема оценки, которую я пытаюсь создать ...:

A + 89.500 - 100.000 Pass с отличием

A 84.500 - 89.490 Pass с отличием

A- 79.500 - 84.490 Pass с отличием

B + 74.500 - 79.490 Pass с заслугой

B 69.500 - 74.490 Pass с заслугой

B- 64.500 - 69.490 Pass с заслугой

C + 59,500 - 64,490 Pass

C 54.500 - 59.490 Pass

C- 49,500 - 54,490 Pass

D 0,000 - 49,490 Указанный сбой

Я бы не отказался идти по маршруту VBA, однако мое понимание языка VB абсолютно минимально (не нравится) ... если это становится слишком утомительным, я подумывал создать небольшое приложение php / mysql вместо этого.

Ответы [ 5 ]

21 голосов
/ 17 марта 2010

Вы можете сделать это намного более элегантно с формулой VLOOKUP, создав отдельную таблицу, отображающую нижние границы на буквы. Таблица сопоставления должна быть отсортирована по возрастанию.

Например:

Таблица

<b>A     B</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 выполнит двоичный поиск, чтобы найти значение, которое (при условии, что данные отсортированы) именно то, что вы хотите.

1 голос
/ 02 августа 2011

Перейдите в редактор Visual Basic и вставьте этот код. Я не знаю, какую версию Excel вы используете, но для версий до 2007 года перейдите в раздел Инструменты, Макросы, Редактор Visual Basic. Для версии 2007 и новее она находится на вкладке «Разработка», которая по умолчанию не включена.

В зависимости от того, как вы хотите связать ее, вы можете добавить кнопку на страницу или вызвать ее из события Worksheet_Calculate.

Это предполагает, что у вас есть общая оценка учащегося в ячейке A2, и результаты будут помещены в A2 и B2.

Sub Calculate
    dim LetterGrade as string
    dim Superlative as string
    Select Case Cells(1,2)
        Case  >= 89.500
            LetterGrade="A+"
            Superlative ="Pass with Distinction"

        Case  84.500 to 89.490 
            LetterGrade="A"
            Superlative ="Pass with Distinction"

        Case 79.500 to 84.490 
            LetterGrade="A-"
            Superlative ="Pass with Distinction"

        Case  74.500 to 79.490 
            LetterGrade="B+"
            Superlative ="Pass with Merit"

        Case 69.500 to 74.490
            LetterGrade="B"
            Superlative ="Pass with Merit"

        Case 64.500 to 69.490 
            LetterGrade="B-"
            Superlative ="Pass with Merit"

       case 59.500 to 64.490 
            LetterGrade="C+"
            Superlative ="Pass"

        Case 54.500 to 59.490
            LetterGrade="C"
            Superlative ="Pass"

        Case 49.500 to 54.490
            LetterGrade="C-"
            Superlative ="Pass"
        Case <=  49.490 
            LetterGrade="F"
            Superlative ="Specified Fail"

 End Select
        Cells(2, 1) = LetterGrade
        Cells(2, 2) = Superlative


End Sub
0 голосов
/ 07 августа 2013

В то время как я предпочитаю метод Vlookup (решение Slaks) для числовых параметров для простоты и элегантности, альтернатива, которая становится полезной в случае нечисловых параметров, является объединенными IF.

=IF( Case1 , "Label 1", "" ) & 
 IF( Case2 , "Label 2", "" ) & 
 IF( Case3 , "Label 3", "" ) & 

..... и т. Д.

Например, в этом случае:

= IF( O5 >= 89.5 , "A+" , "" ) & 
  If( AND ( O5 < 89.5 , O5 >= 84.5 ) , "A" , "" ) & 
  If( AND ( O5 < 84.5 , O5 >= 79.5 ) , "B+" , "" ) &

..... и так далее для других уровней.

0 голосов
/ 18 марта 2010

Решение VLOOKUP кажется лучшим. Чтобы добавить сценарий VBA, вы можете вызвать панель инструментов Visual Basic, добавить элемент управления, например Button, и дважды щелкнуть его. Код для этого события открывается в среде 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
0 голосов
/ 17 марта 2010

Простым решением было бы просто разделить формулу на две ячейки

=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")))))
...