2011-12-30 23 views
1

Вот мои 2 колонкиВПР с пустыми ячейками

A  B 
Spain [EMPTY] 
France Euros 
Spain Euros 

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

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

Я попробовал его с VLOOKUP, но он дал мне
C1 = [Empty], C2 = Евро

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

+2

Um ... почему испания в списке дважды один раз пустой и один раз с валютой? Устраните пустую проблему и решите проблему ... – xQbert

+0

xQbert сказал вам решение. Объяснение записи: VLOOKUP вернет значение ** first ** matching (которое здесь пусто для Span) – JMax

+0

Ну, на самом деле я привел пример короткого списка. Но мой список имеет значения 10'000 +, и он имеет много раз пустых значений в виде валют (поскольку у нас нет информации). Чтобы быть полным, я затем ставлю 10 лучших расходов в странах и хочу связать их соответствующие валюты. – SammyDow

ответ

2

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

Колонка D является Spain, France и т.д.

Колонка E теперь =VLOOKUP(D1,B:C,2,0)

+0

вариант (c). Значительно проще, чем мой вариант (а) и, следовательно, более практичный - читайте превосходный путь вперед. Но я очень хотел встретить колонку D ... – brettdj

+0

Эта опция работала отлично. Это круто! Большое вам спасибо за вашу быструю помощь! Помимо того, что он помог мне решить мою проблему, он также улучшил мои навыки Excel. – SammyDow

+0

Простой и элегантный. В основном говорит, что если валюта пуста, забросьте страну, чтобы vlookup соответствовал только тем странам, которые не являются пустыми. +1 – xQbert

1

я больше 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 - Enter вместе

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

  • IF(--(A$1:A$6=C1)*LEN(B$1:B$6)>0,ROW(A$1:A$6),0)) проверяет, что A1 матчей каждый из А1-А6, и, соответственно, является ли 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

+2

Немного короче (при условии Excel 2007+): '= IFERROR (INDEX (B $ 1: B $ 6, MAX (IF (- (A $ 1: A $ 6 = C3) * LEN (B $ 1: B $ 6)> 0, ROW (A $ 1: A $ 6), - 1))), "no match") ' –

+0

Большое спасибо за быстрый ответ. Я удивлен тем, как быстро некоторые из вас, ребята, могут придумать ответы, я надеюсь, что однажды у меня будут эти навыки. К сожалению, когда я его использую, я получаю значение «Нет соответствия», даже когда я нажимаю SHIFT - CTRL - ENTER вместе. Может быть, из-за того, что в моем файле столбец C является результатом: INDEX («TCD City»! $ B $ 6: $ C $ 949; Y19; 1)? Я не объясняю это очень четко, есть ли способ добавить файл Excel? – SammyDow

+0

Я пробую ваш комментарий и вернусь к вам, как только это будет сделано – SammyDow

2

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

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

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

+0

+1 разумный подход (плюс приятное редактирование на оригинальном q). – brettdj

+0

Я пытаюсь один за другим использовать все полезные подходы, которые были отправлены на этот пост. Я дам вам знать, как только попробую, но спасибо заранее! :) – SammyDow

+0

Дорогой Qbert, чтобы ответить вам, единственными вариантами являются либо валюта, либо пустая запись. Таким образом, ваш метод будет работать. Тем не менее, всякий раз, когда я сортирую свои столбцы по-разному (у моего файла больше 100 столбцов), результаты будут меняться и, таким образом, возвратят нас к той же проблеме с пустыми результатами, верно? – SammyDow

1

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

Отмечу, что использование MAX на самом деле означает, что ваша формула (и измененная версия chris) фактически дает последний непустой матч. Вы также можете сделать это с не 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

+0

+1 @BarryHoudini Я знал, что создал формулустайн! Спасибо, что нашли время, чтобы опубликовать это всеобъемлющее решение. – brettdj