Excel: вложенный оператор IF, если все условия истинны, возвращает все истинные значения

Я хочу вернуть несколько значений для всех выполненных операторов true. Я использую следующую формулу:

=IF(
AND(I4=1,J4=1),"2G",
IF(
AND(Q4=1,V4=1),"3G",
IF(
AND(AC4=1,AG4=1),"4G",
"Other")))

Однако это возвращает первое истинное значение из вложенного IF. Я хочу вернуть все три значения, 2G 3G 4G, если все верно. Что-то вроде concatenated результата.


person Sarah    schedule 20.04.2016    source источник


Ответы (2)


чтобы не получить «2G3G4G», а также получить «другое», если ни одно из них не соответствует действительности, я предлагаю что-то вроде этого:

=TRIM(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE("     "," ",IF(AND(I4=1,J4=1)," 2G"," "),1)," ",IF(AND(Q4=1,V4=1),"3G "," "),3)," ",IF(AND(AC4=1,AG4=1),"4G"," "),5),"     ","other"))

Если у вас есть какие-либо вопросы просто спросить ;)

ИЗМЕНИТЬ:

Для вопросов, которые меняются, пока на них отвечают, я предоставлю некоторый «общий» код.

Если вы хотите, чтобы все решения были выстроены в линию, вы можете использовать это:

=SUBSTITUTE(SUBSTITUTE(TRIM(SUBSTITUTE(IF([C_1],[E_1]&" ","  ")&IF([C_2],[E_2]&" ","  ")&...&IF([C_n],[E_n],"  "),REPT("  ",[TC]),[NS]))," ",[ND]),[SR]," ")
  • [C_1],[C_2],...,[C_n] : условия для каждого отдельного выражения
  • [E_1],[E_2],...,[E_n] : сами выражения
  • [TC] : общее количество всех IF в этой формуле
  • [NS] : выражение, если ни одно решение не верно
  • [ND] : новый разделитель, который вы хотите
  • [SR] : использованная «замена пробела»

Примечание. В этом решении нельзя использовать выражения, содержащие пробелы. Просто замените их символом, который вы не используете, например подчеркиванием. (Выражение вроде "Exp. 1" будет "Exp._1") Это будет изменено обратно в конце с помощью [SR].

Таким образом, ваше решение будет выглядеть так:

=SUBSTITUTE(SUBSTITUTE(TRIM(SUBSTITUTE(IF(OR(I4=1,J4=1),"2G ","  ")&IF(AND(Q4=1,V4=1),"3G ","  ")&IF(AND(AC4=1,AG4=1),"4G","  "),REPT("  ",3),"other"))," ","/"),[SR]," ")

Поскольку ваши выражения не содержат пробелов, часть [SR] можно пропустить:

=SUBSTITUTE(TRIM(SUBSTITUTE(IF(OR(I4=1,J4=1),"2G ","  ")&IF(AND(Q4=1,V4=1),"3G ","  ")&IF(AND(AC4=1,AG4=1),"4G","  "),REPT("  ",3),"other"))," ","/")

Если у вас еще остались вопросы, просто задавайте.

person Dirk Reichel    schedule 20.04.2016
comment
Сочетание твоего и @BruceWayne делает его немного короче; =TRIM(SUBSTITUTE(IF(AND(I4=J1,J4=1),"2G"," ") & IF(AND(Q4=1,V4=1)," 3G"," ") & IF(AND(AC4=1,AG4=1)," 4G"," ")," ","OTHER")) Если возвращается 3 пробела, OTHER заменяется. - person Scott Craner; 20.04.2016
comment
@Dirk Я хочу вставить 2G только один раз, но если я зарегистрирую один, проверит ли оба условия истинность. Как я могу разделить оператор if для проверки каждого, но не добавлять текст для 2G? - person Sarah; 20.04.2016
comment
ты имеешь в виду OR(I4=1,J4=1)? - person Dirk Reichel; 20.04.2016
comment
@ScottCraner, но false/false/true вернет other4G ... Но =TRIM(SUBSTITUTE(IF(OR(I4=J1,J4=1),"2G"," ") & IF(AND(Q4=1,V4=1)," 3G"," ") & IF(AND(AC4=1,AG4=1)," 4G"," ")," ","other")) с 2 пробелами, если не 4G, и замена 4 пробелов сделает это ... ;) - person Dirk Reichel; 20.04.2016
comment
Да, я вижу это. Это была единственная комбинация, которую я не пробовал. - person Scott Craner; 20.04.2016
comment
Я не хочу быть злым, но, пожалуйста, перестаньте менять вопрос, иначе этому никогда не будет конца... - person Dirk Reichel; 21.04.2016

У вас есть единственная формула If(), поэтому она остановится, как только будет найдено первое ИСТИНА. Вместо этого просто соедините их:

=If(And(I4=1,J4=1),"2G","") & if(and(q4=1,v4=1),"3G","") & if(and(ac4=1,ag4=1),"4G","")

редактировать: только что понял, что это может оставить вас с ячейкой, которая говорит «2G3G4G», что, как я полагаю, не совсем то, что вы хотите. Просто добавьте разделитель запятой, если это необходимо.

edit2: В соответствии с вашим комментарием вам может понадобиться следующее:

=If(Or(I4=1,J4=1),"2G","") & if(Or(q4=1,v4=1),"3G","") & if(Or(ac4=1,ag4=1),"4G","")

Это проверит, является ли I4=J1 или J4=1. Если любой из них равен 1, он вернет «2G». То же самое с Q4 и V4, если любой из них 1, он вернет «3G».

person BruceWayne    schedule 20.04.2016
comment
Дангнаббит, у тебя на один быстрее, чем у меня. - person Scott Craner; 20.04.2016
comment
@ScottCraner - Это должно было наконец случиться! Теперь ты знаешь, что я иногда чувствую :P - person BruceWayne; 20.04.2016
comment
@BruceWayne, если я вместо этого хочу разделить проверку для каждой ячейки, например If(And(I4=J1),"2G","")&If(And(J4=1),"2G",""), это все еще действительно? Я хочу вставить 2G только один раз, но если я зарегистрирую один if, он проверит, чтобы оба условия были истинными. - person Sarah; 20.04.2016
comment
@ Сара - Извините, вы можете объяснить, что вы имеете в виду? Вам не нужно And(), если вы просто сравниваете одно значение. Итак, вы можете сделать If(I4=J1,"2G","") & If(J4=1,"2G","") . Что вы имеете в виду ... но если я проверю одно, если оно проверит, что оба условия верны? - person BruceWayne; 20.04.2016
comment
Измените AND на OR - person Scott Craner; 20.04.2016
comment
@BruceWayne идеально. если я добавлю /, могу ли я контролировать, чтобы он не стоял в начале значения? - person Sarah; 21.04.2016