多列与多列查找

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

我还没有find一个清洁的方式来使用VLOOKUP,INDEX(MATCH)等多列来做到这一点)有没有办法在函数内过滤?

任何帮助深表感谢!

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

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

为了让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版本可以进行类似的更改

我使用这种types的问题的解决scheme是创build一个额外的列作为每个表的唯一标识符。 所以,在你的情况下,

主表:关键的公式,假设你以第一列= 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] 

参考表:在这里,向左边插入额外的列,这样你可以做一个查找。 键入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或复杂的公式更容易理解和更新。

下面是一个简单的多列MATCH(search这种公式时经常出现的方法)示例:

在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") 

input公式时一定要使用Ctrl + Shift + Enter。

在这里输入图像说明

发布此注意,它有一个问题,你应该知道:上面的例子匹配:

  B | Two | Blue 

但它也会匹配:

  BT | wo | Blue