多列与多列查找

时间:2012-01-30 02:25:57

标签: excel excel-formula

我正在使用一个公式来匹配两个工作表之间的多个列,并返回最后一个参考工作表最终列数据。我知道这在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

我所遵循的公式应匹配该特定行中的每一列,并将参考工作表中的数据单元格值添加到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 个答案:

答案 0 :(得分:8)

我同意vasek1,添加额外的列将简化所需的公式,但如果你想避免额外的列,可以使用[相对]简单的方法。

方法1 - 执行与vasek1相同的连接....但在公式中,例如在E2中 主

=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版本

答案 1 :(得分: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]

参考表:在这里,将额外的列插入左侧,以便对其进行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

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

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

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

答案 2 :(得分:0)

这是一个简单的多列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

答案 3 :(得分:0)

您所需要的通常称为多重查找。 有几次以各种形式询问过这个问题。 我已编制了here此类帖子的列表。 (这个在列表中)

有很多可能的解决方案。 我发现最健壮的那个here。 适应这种情况,E3中的公式将是

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

并向下复制。