Объедините два вложенных оператора IF с несколькими критериями - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть два столбца данных на листе "Meds" ...

  MedContinuing     AgeAtMedStop
      Yes             "Blank"
      Yes              72.22
      No              "Blank"
      No               72.57
    "Blank"            73.85

Я пишу формулу на отдельном листе, чтобы получить 1 или 0 на основе следующего:

  1. Если MedContinuing пусто, ничего не делать
  2. Если MedContinuing равно "Нет", а AgeAtMedStop пусто, ничего не делать
  3. Если MedContinuing - «Да», а AgeAtMedStop - «Пусто», верните 1. Если AgeAtMedStop - число, верните 0.
  4. Если MedContinuing - «Нет», а AgeAtMedStop - число, верните 1. В противном случае ничего не возвращайте.

Мне удалось написать две отдельные функции (см. Ниже), когда MedContinuing равно "Да" или когда "Нет", но мне нужно объединить обе в одну формулу.

Когда это да ...

=IF(INDEX(Meds!2:2,MATCH("MedContinuing",Meds!$1:$1,0))="","",
IF(INDEX(Meds!2:2,MATCH("MedContinuing",Meds!$1:$1,0))="No","",
IF(AND(INDEX(Meds!2:2,MATCH("MedContinuing",Meds!$1:$1,0))="Yes",INDEX(Meds!2:2,MATCH("AgeAtMedStop",Meds!$1:$1,0))=""),1,0)))

Когда нет ...

=IF(INDEX(Meds!2:2,MATCH("MedContinuing",Meds!$1:$1,0))="","",
IF(INDEX(Meds!2:2,MATCH("MedContinuing",Meds!$1:$1,0))="Yes","",
IF(AND(INDEX(Meds!2:2,MATCH("MedContinuing",Meds!$1:$1,0))="No",INDEX(Meds!2:2,MATCH("AgeAtMedStop",Meds!$1:$1,0))=""),"",
IF(AND(INDEX(Meds!2:2,MATCH("MedContinuing",Meds!$1:$1,0))="No",INDEX(Meds!2:2,MATCH("AgeAtMedStop",Meds!$1:$1,0))>0),1,0))))

РЕДАКТИРОВАТЬ: Решение

Используя логику Питера К. ...

=IF(INDEX(Meds!6:6,MATCH("MedContinuing",Meds!$1:$1,0))="","",
IF(AND(INDEX(Meds!6:6,MATCH("MedContinuing",Meds!$1:$1,0))="No",INDEX(Meds!6:6,MATCH("AgeAtMedStop",Meds!$1:$1,0))=""),"",
IF(AND(INDEX(Meds!6:6,MATCH("MedContinuing",Meds!$1:$1,0))="Yes",INDEX(Meds!6:6,MATCH("AgeAtMedStop",Meds!$1:$1,0))=""),1,
IF(AND(INDEX(Meds!6:6,MATCH("MedContinuing",Meds!$1:$1,0))="Yes",INDEX(Meds!6:6,MATCH("AgeAtMedStop",Meds!$1:$1,0))>0),0,
IF(AND(INDEX(Meds!6:6,MATCH("MedContinuing",Meds!$1:$1,0))="No",INDEX(Meds!6:6,MATCH("AgeAtMedStop",Meds!$1:$1,0))>0),1,"")))))

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Вы можете попробовать этот метод ниже

Я создал вспомогательную таблицу для требуемой логики, она поможет обновить или расширить логику в будущем

Формула в ячейке C2:

=INDEX($F$2:$G$4,MATCH(A2,$E$2:$E$4,0),IF(B2="Blank",1,IF(ISNUMBER(B2),2,0)))

enter image description here

0 голосов
/ 06 ноября 2018

Из вашего вопроса не совсем понятно, почему вы бы использовали функции INDEX и MATCH для такой простой задачи?

Предлагаю начать с базовой вложенной функции if:
=IF(A2="";"";IF(A2="No";IF(B2="";"";1);IF(B2="";1;0)))

Вы можете поместить эту функцию рядом с вашими двумя столбцами, а затем скопировать на другой лист, чтобы ссылки были сохранены в Excel. Я также предполагаю, что ваши данные чистые и правильные, т.е. в ваших столбцах существуют только 3 возможных значения для MedContinuing («Да», «Нет» или пусто) и 2 для AgeAtMedStop (пусто или число), поэтому тест IF отсутствует необходим для устранения других возможных значений.

...