【问题标题】:Using index and match to do a lookup both vertically and horizontally使用索引和匹配进行垂直和水平查找
【发布时间】:2017-07-10 04:13:26
【问题描述】:

我在一张纸上有一列数据,每个单元格都包含一个值,该值可以在另一张纸上的数组中找到。我试图找到一个函数,如果它从工作表 1 的列中找到工作表 2 的数组中的值,则返回最左侧列中的值。

以下是数据示例:

表 1

| AH2377507 |
| 2188622   |
| EA404278  |
| AH885430  |

表 2

aaa | 1874379 | AH2377507 | EA2377507 | PS2377507 | 67004276 | 949529 | AH2065634
bbb | 1938614 | 2186486   | 2188622   | 2188708
ccc | 919973  | AH404278  | EA404278  | PS404278 | 2188746
ddd | 960929  | AH885430  | EA885430  | PS885430

因此,当在工作表 2 中找到“2188622”时,它会返回“bbb”。

此外,工作表 2 中包含数据的列数因行而异,因此数组中存在空白单元格,如果这很重要的话。

我尝试过将 vlookp 嵌套在 hlookup 中,反之亦然,以及将 hlookup 嵌套在索引/匹配中,但这些想法都不起作用。

【问题讨论】:

    标签: excel indexing match vlookup vba


    【解决方案1】:

    您需要的不仅仅是INDEX/MATCH

    =INDEX(Sheet2!$A$1:$A$4,SUMPRODUCT((Sheet2!$B$1:$F$4=Sheet1!$A1)*ROW(Sheet2!$A$1:$A$4)))
    

    假设您的 Sheet1 数据位于 A1:A4 中,而您的 Sheet2 数据位于 A1:F4 中。

    注意末尾的ROW(Sheet2!$A$1:$A$4) 与您的数据无关。例如,范围必须始终从 A1 开始,如果您在 Sheet2 中有 10 记录,那么它必须以 A10 结束。


    更多信息...

    因为您的查找值来自二维数组,而不是单行/列,所以您不能使用MATCH。我们需要模拟一个匹配,这就是SUMPRODUCT 的来源。如果您在A1:B2 中有以下数组

    a   a
    a   b
    

    我们可以执行A1:B2="b"的逻辑运算。这会创建一个这样的数组

    FALSE   FALSE
    FALSE   TRUE
    

    记住 TRUE=1 和 FALSE=0 如果我们乘以 ROW(A1:A2) 则该数组变为

    0*1 0*1    =    0    0
    0*2 1*2    =    0    2
    

    所以你可以看到这个数组的SUM 是2,这正是我们正在寻找的位置(这是MATCH 会返回的位置)

    所以我们将它全部包装在一个 SUMPRODUCT 中

    =SUMPRODUCT((A1:B2="b")*ROW(A1:A2))
    

    你已经得到了答案

    【讨论】:

    • 您的ROW(Sheet1!$A$1:$A$4) 可以是ROW(Sheet2!$A$1:$A$4) 吗? - 这将使$A$4 应该与Sheet2 中的项目数相关联更加明显。 ...=Sheet1!$A$1 应该是 ...=Sheet1!$A1 以便可以将公式复制到其他行吗?
    • 我不得不考虑这一点,但是是的,我同意。谢谢!
    • 在我阅读了您的原始评论后但在我有机会回复之前,有人用工作问题打断了我 - 现在我很高兴他们这样做了 - 这意味着我不需要想出一个解释:D
    • 如果数据不是从第 1 行开始,我花了一段时间才明白您所说的不移动 $A$1 的意思。(您需要一个从 1 开始的数字数组,而不是对应的实际行到数据。)您可以通过使用(ROW(Sheet2!$A$1:$A$4)+1-ROW(Sheet2!$A$1)) 来解决这个问题,其中$A$1:$A$4 是实际数据范围,$A$1 是实际数据范围中的第一个单元格。但我不知道是否更容易解释,或者解释:$A$4 必须设置为查找数据范围中的行数,即使该查找范围在$A$47:$F$50 中。跨度>
    • 您认为是否值得让公式更复杂以便更容易解释如何实现它,还是我们应该一直寻求更好地解释它?我编辑希望使它更容易理解,并且根据您的建议,我还考虑将最后一位更改为 ROW(OFFSET(Sheet2!$A$1,,,10,1)),解释说 10 是 Sheet2 中表格中的行数i>...我只是不愿意增加复杂性。
    猜你喜欢
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 2012-05-09
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多