Формулы EXCEL - возвращают true, если одно и то же значение в одном из трех других столбцов - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть база данных Excel с несколькими листами. Это один лист с общими данными (например, электронная почта и т. Д.), А затем у меня есть другой лист, который содержит адреса электронной почты, подписанные на новостную рассылку (электронные письма просто строка за строкой в ​​первом столбце). На первом «общем» листе у меня есть три отдельных столбца с адресами электронной почты в каждой строке. Мне нужно проверить, есть ли электронное письмо в этих трех столбцах, которые есть в листе бюллетеня - подписан ли человек на новостную рассылку или нет - если так, я хочу поместить электронное письмо в столбец рядом с ним, или просто написать подписку в это.

У меня уже была эта формула: =IFERROR(VLOOKUP($L2, Newsletter!A:A, 1, FALSE),""), но это работает, только если электронные письма хранятся только в одном столбце.

Вот как должна выглядеть база данных - три столбца с электронными письмами и еще один столбец проверки рассылки (теперь столбец рассылки не работает):

Мой лист рассылки выглядит очень просто:

enter image description here

Есть ли формула для этого или я должен сделать для этого макрос VBA?

Ответы [ 4 ]

0 голосов
/ 07 сентября 2018

Ссылка на образец листа: Нажмите здесь

Для более простого решения, чем предложенное вами, попробуйте следующее:

  1. Создание именованного диапазона динамического размера: нажмите кнопку Новый ... , присвойте ему имя (например, электронные письма) и используйте формулу: =OFFSET(Sheet1!$F$2,0,0,COUNTA(Sheet1!$F:$F)-1,1) (обратите внимание: формулы I пользуюсь перепиской с прикрепленным скриншотом)
  2. Для формулы в столбце «Информационный бюллетень» используйте: =IF(OR(Emails=A2, Emails=B2,Emails=C2),TRUE,FALSE). Введите эту формулу как формулу массива (нажмите CTRL + SHIFT + ENTER , и она будет помещать {} вокруг формулы, и вы знаете, что сделали все правильно ).
  3. Перетащите эту формулу вниз для высоты столбца.

Способ работы этой формулы заключается в том, чтобы сначала ограничить количество ячеек, на которые она должна постоянно ссылаться для выполнения вычисления (шаг 1 выше).

Далее, используя простой оператор OR, мы сопоставляем каждый столбец с динамически изменяемым списком. Если любых из ячеек совпадают, будет возвращено TRUE.

enter image description here

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

Я уже решил, спасибо за помощь всем.

Формула: =IF(OR(NOT(ISNA(VLOOKUP($L4, Newsletter!A:A, 1, FALSE))),NOT(ISNA(VLOOKUP($M4, Newsletter!A:A, 1, FALSE))),NOT(ISNA(VLOOKUP($N4, Newsletter!A:A, 1, FALSE)))),"YES","NO")

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

Есть несколько способов сделать это. Мне нравятся функции массива, поэтому я бы сделал это так:

В столбце O вы можете вставить что-нибудь в строку

{=SUM(IF(ISBLANK(Newsletter!A:A),0,IF($L2=Newsletter!A:A,1,IF($M2=Newsletter!A:A,1,IF($N2=Newsletter!A:A,1,0)))))}

Примечание. Это формула массива. Это означает, что вам нужно вставить ее в ячейку, затем нажать ctrl+shift+enter и скопировать эту ячейку в ваш список.

Первый оператор if проверяет, чтобы пустые ячейки в списке электронных писем на вкладке «Информационный бюллетень» не совпадали с пустыми ячейками на вкладке «База данных». Следующие три оператора if последовательно проверяют столбцы L, M и N, чтобы увидеть, существуют ли эти электронные письма в большом списке.

В зависимости от размера ваших списков, может быть быстрее ограничить длину A чем-то более похожим на информационный бюллетень! строк, которые существуют в информационном бюллетене! A: четыре раза для каждой строки на вкладке базы данных.

Если это одноразовая вещь, это не имеет большого значения, но если вы постоянно обновляете список, возможно, быстрее запустить скрипт vba.

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

попробовать

=IFERROR(VLOOKUP($L2, Newsletter!A:A, 1, FALSE), IFERROR(VLOOKUP($m2, Newsletter!A:A, 1, FALSE), IFERROR(VLOOKUP($n2, Newsletter!A:A, 1, FALSE), "not subscribed")))
...