多列与多列查找

Mat*_*les 4 excel excel-formula

我正在使用一个公式来匹配两个工作表之间的多个列,并返回最后一个参考工作表最终列数据.我知道这在VBA中是可行的,但我正在寻找一种公式方法.

MainWorksheet:

User  | Region   | Country | City | Lookup
--------------------------------------------------
User1 | Europe   | Italy   | Rome | [formula here]
User2 | Americas | Brazil  | Rio  | [formula here]
Run Code Online (Sandbox Code Playgroud)

ReferenceWorksheet:

Region   | Country | City   | Data
-----------------------------------
Europe   | England | London | some data
Americas | Brazil  | Rio    | more data
Europe   | Italy   | Rome   | some more data
Run Code Online (Sandbox Code Playgroud)

我之后的公式应与该特定行中的每一列匹配,并将参考工作表中的数据单元格值添加到MainWorksheet中.

eg. If (MainWorksheet.Region = ReferenceWorksheet.Region) &&
       (MainWorksheet.Country == ReferenceWorksheet.Country) && 
       (MainWorksheet.Region == ReferenceWorksheet.Region) Then
    MainWorksheet.Column E = ReferenceWorksheet.Current Row:Data Column
Run Code Online (Sandbox Code Playgroud)

我还没有找到一种使用VLOOKUP,INDEX(MATCH)等使用mutliple列来执行此操作的清理方法.有没有办法在函数内进行过滤?

任何帮助深表感谢!

bar*_*ini 8

我同意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 - 具有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)

请注意,第一个公式找到第一个匹配,后一个匹配最后一个匹配.我假设参考数据只有每个地区/国家/城市组合的单个实例,在这种情况下,它们都会给出相同的结果,但并不能保证在每种情况下都是如此.

要允许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版本


vas*_*ek1 6

我用于此类问题的解决方案是创建一个额外的列作为每个表的唯一标识符.所以,在你的情况下,

主表:键的公式,假设你从列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]
Run Code Online (Sandbox Code Playgroud)

参考表:在这里,将额外的列插入左侧,以便您可以对其进行vlookup.关键字A2的公式是

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
Run Code Online (Sandbox Code Playgroud)

然后,主表中的查找公式变得非常简单:

F2 = VLOOKUP(E2, ReferenceTable!$A$2:$E$4, 5, 0)
Run Code Online (Sandbox Code Playgroud)

然后,您可以根据需要隐藏用户的键列.这种方法的优点是它使公式简单,并且比编写VBA或复杂的公式更容易理解和更新.