Несколько столбцов против нескольких столбцов Поиск - PullRequest
4 голосов
/ 30 января 2012

Я запрошу формулу, чтобы сопоставить количество столбцов между двумя листами и вернуть данные последнего столбца из последних справочных листов.Я знаю, что это выполнимо в VBA, но я ищу метод формулы.

MainWorksheet:

User  | Region   | Country | City | Lookup
--------------------------------------------------
User1 | Europe   | Italy   | Rome | [formula here]
User2 | Americas | Brazil  | Rio  | [formula here]

ReferenceWorksheet:

Region   | Country | City   | Data
-----------------------------------
Europe   | England | London | some data
Americas | Brazil  | Rio    | more data
Europe   | Italy   | Rome   | some more data

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

eg. If (MainWorksheet.Region = ReferenceWorksheet.Region) &&
       (MainWorksheet.Country == ReferenceWorksheet.Country) && 
       (MainWorksheet.Region == ReferenceWorksheet.Region) Then
    MainWorksheet.Column E = ReferenceWorksheet.Current Row:Data Column

Я не нашел ясного способа сделать это, используя столбцы с несколькими строками, используя VLOOKUP, INDEX (MATCH)) и т. д. Есть ли способ фильтрации внутри функции?

Любая помощь очень ценится!

Ответы [ 4 ]

8 голосов
/ 30 января 2012

Я согласен с vasek1, добавление дополнительных столбцов упростит необходимые формулы, но если вы хотите избежать дополнительных столбцов, есть [относительно] простые методы.

Метод 1 - выполните то же объединение, что и vasek1 ....но внутри формулы, например, в E2 Main

=INDEX(Ref!D$2:D$100,MATCH(B2&"-"&C2&"-"&D2,Ref!A$2:A$100&"-"&Ref!B$2:B$100&"-"&Ref!C$2:C$100,0))

Формула должна быть подтверждена с помощью CTRL + SHIFT + ENTER

Метод 2 - a не массив версия с LOOKUP

=LOOKUP(2,1/(Ref!A$2:A$100=B2)/(Ref!B$2:B$100=C2)/(Ref!C$2:C$100=D2),Ref!D$2:D$100)

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

Разрешение C2чтобы быть "<>" означающим «любая страна» (согласно комментарию), вы можете использовать эту пересмотренную версию формулы LOOKUP

=LOOKUP(2,1/(Ref!A$2:A$100=B2)/((Ref!B$2:B$100=C2)+(C2="<>"))/(Ref!C$2:C$100=D2),Ref!D$2:D$100)

Аналогичное изменение может быть применено к INDEX /MATCH версия

6 голосов
/ 30 января 2012

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

Основная таблица: формула для ключа, при условии, что вы начинаете со столбца 1 = A, равна

E2 = B2 & "(underscore)" & C2 & "(underscore)" & D2

User  | Region   | Country | City | Key                 | Lookup        
--------------------------------------------------
User1 | Europe   | Italy   | Rome | Europe_Italy_Rome   | [formula here]
User2 | Americas | Brazil  | Rio  | Americas_Brazil_Rio | [formula here]

Справочная таблица: здесь, вставьте дополнительный столбец слева, чтобы вы могли сделать vlookup на нем. Формула для ключа в А2:

A2 = B2 & "(underscore)" & C2 & "(underscore)" & D2


Key                   | Region   | Country | City   | Data
---------------------------------------------------------------------
Europe_England_London | Europe   | England | London | some data
Americas_Brazil_Rio   | Americas | Brazil  | Rio    | more data
Europe_Italy_Rome     | Europe   | Italy   | Rome   | some more data

Тогда формула поиска в основной таблице становится очень простой:

F2 = VLOOKUP(E2, ReferenceTable!$A$2:$E$4, 5, 0)

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

0 голосов
/ 16 февраля 2018

То, что вам нужно, обычно называется Multiple Lookup . Это спросили несколько раз, в различных формах. Я составил здесь список таких сообщений. (Этот есть в списке)

Есть много возможных решений для этого. Тот, который я нашел наиболее надежным, показан здесь . Адаптированный к этому случаю, формула в E3 будет

=INDEX(Ref!D:D,SUMPRODUCT(--(Ref!A:A=B3),--(Ref!B:B=C3),--(Ref!C:C=D3),ROW(Ref!D:D)),0)

и копировать вниз.

0 голосов
/ 15 августа 2016

Вот простой пример многостолбцовского MATCH (такой подход, который часто проявляется при поиске формулы этого типа):

В E10:

=IFERROR(INDEX(E3:E5,MATCH(B10&C10&D10,$B$3:$B$5&$C$3:$C$5&$D$3:$D$5,0),1),"No Match")

Обязательно используйте Ctrl + Shift + Enter при вводе формулы.

enter image description here

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

 B | Two | Blue

но также будет соответствовать:

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