VLookup с пустыми ячейками - PullRequest
       5

VLookup с пустыми ячейками

1 голос
/ 30 декабря 2011

Вот мои 2 столбца

A       B
Spain   [EMPTY]
France  Euros
Spain   Euros

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

C1 = Испания, C2 = Франция,
Я хотел бы иметь
D1 = евро, D2 = евро.

Я попробовал это с VLOOKUP, но это дало мне
C1 = [Пусто], C2 = Евро

Большое спасибо за ваше время

Ответы [ 4 ]

2 голосов
/ 30 декабря 2011

Как прокомментировали другие, VLOOKUP вернет первое найденное совпадение, поэтому вы получите [EMPTY] для Spain.
Вы можете обойти это, добавив промежуточный столбец.Предположим, что вы вставили столбец B с формулой =IF(C1="","",A1) и скопировали все используемые строки.

Столбец D равен Spain, France и т. Д.

Столбец E теперь =VLOOKUP(D1,B:C,2,0)

2 голосов
/ 30 декабря 2011

ЕСЛИ вы можете отсортировать столбцы, отсортируйте их по столбцу A, затем по убыванию B (ZA) и используйте vlookup, который вы пытаетесь использовать.Это поместит страну со значением 1, поэтому V-Lookup вернет значение вместо пустого.Когда возвращается значение empty, его КАЖДЫЙ единственный экземпляр этой записи в столбце A имеет пустое значение.Однако, если запись в A имеет несколько значений, она будет выбирать первое в порядке убывания.

Так есть ли ситуации, когда запись в столбце A имеет несколько значений, превышающих 1 валюту, и пустую запись?

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

1 голос
/ 31 декабря 2011

Я чувствую себя здесь как мошенник ... не задавайте мне вопросов VBA!

Я отмечаю, что использование MAX фактически означает, что ваша формула (и исправленная версия Криса) на самом деле дает последнее непустое совпадение. Вы также можете сделать это с формулой не-CSE LOOKUP, т.е.

=LOOKUP(2,1/(B$2:B$6<>"")/(A$2:A$6=C1),B$2:B$6)

, который вернет # N / A, если нет совпадений

вместо текста «нет совпадения» вместо этого, при условии, что формула возвращает текстовые значения, которые можно использовать в 2003-совместимом

=LOOKUP("zzz",IF({1,0},"No match",LOOKUP(2,1/(B$2:B$6<>"")/(A$2:A$6=C1),B$2:B$6)))

Для первого непустого совпадения вы можете использовать INDEX/MATCH аналогичным образом, т.е.

=INDEX(B$2:B$6,MATCH(1,(B$2:B$6<>"")*(A$2:A$6=C1),0))

подтверждается сочетанием клавиш CTRL + SHIFT + ENTER

1 голос
/ 30 декабря 2011

Я скорее VBA, чем парень формул, но эта (ужасная!) Формула массива вернет первое непустое совпадение

в D1, положит
=IF(MAX(IF(--(A$1:A$6=C1)*LEN(B$1:B$6)>0,ROW(A$1:A$6),0))>0,INDEX(B$1:B$6,MAX(IF(--(A$1:A$6=C1)*LEN(B$1:B$6)>0,ROW(A$1:A$6),0))),"no match")
и нажму Shift - Ctrl- Введите вместе

, как это работает

  • IF(--(A$1:A$6=C1)*LEN(B$1:B$6)>0,ROW(A$1:A$6),0)) проверяет, соответствует ли A1 каждому из A1-A6 и, соответственно, непусто ли B1-B6.
  • Если оба эти условия TRUE, то номер строки этих совпадений помещается в массив, если FALSE формула возвращает ноль.поэтому первый идентификатор массива {0,0,3,0,0,0}
  • Если MAX этого массива не равен нулю, то формула возвращает эту позицию ячейки из столбца B, используя INDEXв INDEX(B$1:B$6,MAX(IF(--(A$1:A$6=C1)*LEN(B$1:B$6)>0,ROW(A$1:A$6),0)))
  • В противном случае «нет совпадения»

Я сниму это для гения формулы по имени Барри Гудини, чтобы увидеть, насколько он может сократить его

Увеличенный образец (включая истинный пустой результат) ниже

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...