Кто-нибудь знает, как сократить эту формулу Excel, поскольку я достиг предела вложенных «ЕСЛИ»?
=IF(Sheet!$G$2=Sheet1!I2,"Y",IF(Sheet!$H2=Sheet1!I2,"Y",
IF(Sheet!$I2=Sheet1!I2,"Y",IF(Sheet!$J2=Sheet1!I2,"Y",
IF(Sheet!$K2=Sheet1!I2,"Y",IF(Sheet!$L2=Sheet1!I2,"Y",
IF(Sheet!$M2=Sheet1!I2,"Y",IF(Sheet!$N2=Sheet1!I2,"Y",
IF(Sheet!$O2=Sheet1!I2,"Y",IF(Sheet!$P2=Sheet1!I2,"Y",
IF(Sheet!$Q2=Sheet1!I2,"Y",IF(Sheet!$R2=Sheet1!I2,"Y",""))))))))))))
решение1
Примечание:Мой ответ, приведенный ниже, был подобран так, как вы бы это сделали с цифровыми логическими схемами, где условия оцениваются параллельно. В этом случае вам нужно явно предусмотреть каждое условие. Это было полным перебором; гораздо сложнее, чем необходимо.
Подходы, показанные в ответе thilina R, используют тот факт, что Excel оценивает формулы и диапазоны последовательно, поэтому Excel уже выполняет большую часть работы по ограничению возможных условий, аналогичных вложенным ЕСЛИ в вопросе.
Мы оба пришли к логике OR, показанной ниже в качестве моего последнего подхода. Я оставлю этот ответ для любой образовательной или новизны, которую он может предоставить. Но ответ thilina R содержит практические решения, и я голосую за Метод 1: HLOOKUP.
Неясно, используете ли вы формулу, которая является более ограничительной, чем необходимо. Я воспользуюсь здесь небольшой сокращенной записью, чтобы упростить обсуждение. Я опущу имена листов и буду ссылаться на тесты равенства следующим образом: Если верно, что , G2=I2
я просто назову его G2
. Если неверно, что G2=I2, я назову его Not-G2
. С помощью этой сокращенной записи ваши вложенные IF могут быть выражены следующим образом:
G2
or: H2 and Not-G2
or: I2 and Not-G2 and Not-H2
or: J2 and Not-G2 and Not-H2 and Not-I2
etc.
Если вам нужны именно эти правила, вы можете сделать это с одним IF и всей этой логикой AND и OR. В сокращении это будет выглядеть так:
=IF(OR(G2,AND(H2,Not-G2),AND(I2,Not-G2,Not-H2),...),"Y","")
Заполнение фактической формулы будет выглядеть так:
=IF(OR(Sheet!$G$2=Sheet1!I2,
AND(Sheet!$H2=Sheet1!I2,Sheet!$G$2<>Sheet1!I2),
AND(Sheet!$I2=Sheet1!I2,Sheet!$G$2<>Sheet1!I2,Sheet!$H2<>Sheet1!I2),
AND(Sheet!$J2=Sheet1!I2,Sheet!$G$2<>Sheet1!I2,Sheet!$H2<>Sheet1!I2,Sheet!$I2<>Sheet1!I2),
AND(Sheet!$K2=Sheet1!I2,Sheet!$G$2<>Sheet1!I2,Sheet!$H2<>Sheet1!I2,Sheet!$I2<>Sheet1!I2,Sheet!$J2<>Sheet1!I2),
AND(Sheet!$L2=Sheet1!I2,Sheet!$G$2<>Sheet1!I2,Sheet!$H2<>Sheet1!I2,Sheet!$I2<>Sheet1!I2,Sheet!$J2<>Sheet1!I2,Sheet!$K2<>Sheet1!I2),
AND(Sheet!$M2=Sheet1!I2,Sheet!$G$2<>Sheet1!I2,Sheet!$H2<>Sheet1!I2,Sheet!$I2<>Sheet1!I2,Sheet!$J2<>Sheet1!I2,Sheet!$K2<>Sheet1!I2,Sheet!$L2<>heet1!I2),
AND(Sheet!$N2=Sheet1!I2,Sheet!$G$2<>Sheet1!I2,Sheet!$H2<>Sheet1!I2,Sheet!$I2<>Sheet1!I2,Sheet!$J2<>Sheet1!I2,Sheet!$K2<>Sheet1!I2,Sheet!$L2<>heet1!I2,Sheet!$M2<>Sheet1!I2),
AND(Sheet!$O2=Sheet1!I2,Sheet!$G$2<>Sheet1!I2,Sheet!$H2<>Sheet1!I2,Sheet!$I2<>Sheet1!I2,Sheet!$J2<>Sheet1!I2,Sheet!$K2<>Sheet1!I2,Sheet!$L2<>heet1!I2,Sheet!$M2<>Sheet1!I2,Sheet!$N2<>Sheet1!I2),
AND(Sheet!$P2=Sheet1!I2,Sheet!$G$2<>Sheet1!I2,Sheet!$H2<>Sheet1!I2,Sheet!$I2<>Sheet1!I2,Sheet!$J2<>Sheet1!I2,Sheet!$K2<>Sheet1!I2,Sheet!$L2<>heet1!I2,Sheet!$M2<>Sheet1!I2,Sheet!$N2<>Sheet1!I2,Sheet!$O2<>Sheet1!I2),
AND(Sheet!$Q2=Sheet1!I2,Sheet!$G$2<>Sheet1!I2,Sheet!$H2<>Sheet1!I2,Sheet!$I2<>Sheet1!I2,Sheet!$J2<>Sheet1!I2,Sheet!$K2<>Sheet1!I2,Sheet!$L2<>heet1!I2,Sheet!$M2<>Sheet1!I2,Sheet!$N2<>Sheet1!I2,Sheet!$O2<>Sheet1!I2,Sheet!$P2<>Sheet1!I2),
AND(Sheet!$R2=Sheet1!I2,Sheet!$G$2<>Sheet1!I2,Sheet!$H2<>Sheet1!I2,Sheet!$I2<>Sheet1!I2,Sheet!$J2<>Sheet1!I2,Sheet!$K2<>Sheet1!I2,Sheet!$L2<>heet1!I2,Sheet!$M2<>Sheet1!I2,Sheet!$N2<>Sheet1!I2,Sheet!$O2<>Sheet1!I2,Sheet!$P2<>Sheet1!I2,Sheet!$Q2<>Sheet1!I2)),"Y","")
(Не могу гарантировать, что там не вкралась опечатка). Формулы такой длины очень сложно вводить и поддерживать. Может быть полезно использовать вспомогательные ячейки для частей формулы.
Если это не те правила, которые вам нужны, вот несколько более простых случаев:
Если вам не нужна эта последовательность, а важно только, чтобы любая одна и только одна ячейка была равна I2, вот способ реализовать ту же логику с одним IF:
=IF((Sheet!$G$2=Sheet1!I2)+(Sheet!$H2=Sheet1!I2)+(Sheet!$I2=Sheet1!I2)+ (Sheet!$J2=Sheet1!I2)+(Sheet!$K2=Sheet1!I2)+(Sheet!$L2=Sheet1!I2)+ (Sheet!$M2=Sheet1!I2)+(Sheet!$N2=Sheet1!I2)+(Sheet!$O2=Sheet1!I2)+ (Sheet!$P2=Sheet1!I2)+(Sheet!$Q2=Sheet1!I2)+ (Sheet!$R2=Sheet1!I2)=1,"Y","")
Каждый набор скобок содержит один из ваших тестов. Если равенство истинно, оно выдает значение
1
, Если не истинно, значение будет0
. Вот как Excel представляет true и false.Результаты всех этих тестов суммируются. Если сумма равна
1
, это означает, что один и только один из тестов был верным.Если на самом деле вас волнует только то, верен ли хотя бы один из этих случаев, вы можете использовать простое ИЛИ:
=IF(OR(Sheet!$G$2=Sheet1!I2,Sheet!$H2=Sheet1!I2,Sheet!$I2=Sheet1!I2, Sheet!$J2=Sheet1!I2,Sheet!$K2=Sheet1!I2,Sheet!$L2=Sheet1!I2, Sheet!$M2=Sheet1!I2,Sheet!$N2=Sheet1!I2,Sheet!$O2=Sheet1!I2, Sheet!$P2=Sheet1!I2,Sheet!$Q2=Sheet1!I2,Sheet!$R2=Sheet1!I2),"Y","")
Обратите внимание, что я добавил переносы строк и дополнительные пробелы во все формулы, чтобы логику было легче увидеть. Если вы хотите скопировать и вставить, вам нужно будет их удалить.
решение2
По сути, вам нужно узнать, имеет ли какая-либо ячейка G2:R2
на одном листе то же значение, что и ячейка I2
на другом листе.
Есть несколько способов сделать это. Самый простой способ, который приходит на ум, это так, поскольку проверяемые вами значения находятся в непрерывном диапазоне:
Метод 1: ГПР/ВПР
=IF(ISERROR(HLOOKUP(Sheet1!I2,Sheet!G2:R2,1,FALSE)),"","Y")
Это использует ищет значение в ячейке I2
на одном листе и проверяет, находится ли оно на другом листе в диапазоне G2:R2
. Если HLOOKUP
находит хотя бы одно значение в диапазоне G2:R2
, которое соответствует ячейке I2
на другом листе, он возвращает Y
или в противном случае не возвращает значение.
Я использовал, HLOOKUP
поскольку предоставленный диапазон был горизонтальным. Если диапазон является вертикальным, вы можете использовать VLOOKUP
вместо этого.
Если значения равнынетв непрерывном диапазоне по любой причине вы можете использовать два других метода, описанных ниже.
Вот еще один способ:
Метод 2: ОБЪЕДИНИТЬ
=IF(ISERROR(FIND(Sheet1!I2,CONCATENATE(Sheet!G2,Sheet!H2,Sheet!I2,Sheet!J2,Sheet!K2,Sheet!L2,Sheet!M2,Sheet!N2,Sheet!O2,Sheet!P2,Sheet!Q2,Sheet!R2))),"","Y")
По сути, это создает большую строку всех значений в ячейках G2:R2
и проверяет, есть ли в ней значение в ячейке I2
другого листа. Если есть, возвращается, Y
в противном случае не возвращается значение.
Обратите внимание, что поскольку этот метод создает большую строку из всех данных в диапазоне ячеек, которые вам нужно найти, в зависимости от типа данных в этих ячейках, он может вернуть Y
неверный результат. Например: если Sheet1!I2
имеет значение 123
и Sheet!G2
имеет значение 12
и Sheet!H2
имеет значение 34
, этот метод все равно отобразит, Y
поскольку "большая строка" будет содержать "1234...", а значение 123
будет в этой строке.
Еще один способ сделать это:
Метод 3: Булев оператор - ИЛИ
[@fixer1234 первым упомянул об этом]
=IF(OR((Sheet!G2=Sheet1!I2), (Sheet!H2=Sheet1!I2),(Sheet!I2=Sheet1!I2), (Sheet!J2=Sheet1!I2), (Sheet!K2=Sheet1!I2), (Sheet!L2=Sheet1!I2), (Sheet!M2=Sheet1!I2), (Sheet!N2=Sheet1!I2), (Sheet!O2=Sheet1!I2), (Sheet!P2=Sheet1!I2), (Sheet!Q2=Sheet!I2), (Sheet!R2=Sheet1!I2) ),"Y","")
Это использует логический оператор OR
для проверки того, есть ли какие-либо значения в диапазоне G2:R2
в ячейке I2
на другом листе. Если логический оператор находит хотя бы одно значение, которое соответствует ячейке I2
на другом листе, он возвращает Y
или в противном случае не возвращает значение.
Метод 4: Распространите формулу
- Если вы хотите использовать только
IF
условия (по какой-то причине, которую я не могу себе представить), вы можете разнести условияIF
по нескольким ячейкам, а затем использовать результат этих ячеек для определения окончательного результата. Например: вы можете иметь несколько условийIF
в одной ячейке и использовать результат этого в другой ячейке вместе с несколькими другимиIF
условиями и так далее.
A1
В ячейке листа может быть следующее :
=IF(Sheet!$G$2=Sheet1!I2,"Y",IF(Sheet!$H2=Sheet1!I2,"Y", IF(Sheet!$I2=Sheet1!I2,"Y",IF(Sheet!$J2=Sheet1!I2,"Y", IF(Sheet!$K2=Sheet1!I2,"Y","")))))
A2
И тогда в ячейке листа может быть следующее :
=IF(A1="Y", "Y", IF(Sheet!$L2=Sheet1!I2,"Y", IF(Sheet!$M2=Sheet1!I2,"Y",IF(Sheet!$N2=Sheet1!I2,"Y", ""))))
A3
Наконец, в ячейке листа можно разместить следующее :
=IF(A2="Y","Y",IF(Sheet!$O2=Sheet1!I2,"Y",IF(Sheet!$P2=Sheet1!I2,"Y", IF(Sheet!$Q2=Sheet1!I2,"Y",IF(Sheet!$R2=Sheet1!I2,"Y","")))))
Метод 5: VBA
Если вы хорошо разбираетесь в VBA, используйте его для создания пользовательской функции, в которой можно иметь любое количество вложенных If
операторов.
Примечание: результат обеих этих формул совпадает с результатом формулы, которую вы предоставили.