【问题标题】:Multiple Column vs Multiple Column Lookup多列与多列查找
【发布时间】:2012-01-30 02:25:57
【问题描述】:

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

主工作表:

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

参考工作表:

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)) 等使用多列。有没有办法在函数中进行过滤?

非常感谢任何帮助!

【问题讨论】:

    标签: excel excel-formula


    【解决方案1】:

    我同意 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 版本

    【讨论】:

    • 感谢朋友的回复。我的一些行中有“”,表示该特定地区的任何国家。知道如何将其纳入方程式吗?
    • @Bonjour 没问题,我添加了另一个公式来满足这种情况 - 我假设“”在主工作表列 C
    【解决方案2】:

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

    主表:键的公式,假设您从列 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 中的 Key 公式为

    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 或复杂的公式更容易理解和更新。

    【讨论】:

    • 感谢朋友的回复。我的一些行中有“”,表示该特定地区的任何国家。知道如何将其纳入方程式吗?
    • 出色的解决方案。让你想知道“为什么我没有想到这一点!?” xD
    【解决方案3】:

    这是一个多列 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。

    发布此内容是为了注意它有一个您应该注意的问题:上面的示例匹配于:

     B | Two | Blue
    

    但它也会匹配:

     BT | wo | Blue
    

    【讨论】:

      【解决方案4】:

      您需要的通常称为多重查找。 这被问了几次,以各种形式。 我整理了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)
      

      然后向下复制。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-19
        • 1970-01-01
        • 2017-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多