如何显示特定搜索的所有结果。当特定搜索有多个结果时。不使用vLookup

时间:2018-06-28 20:37:16

标签: excel excel-formula excel-2010 excel-2007

我有一个2列的工作表。 ID和SearchTerm

ID对于多个SearchTerm具有相同的ID#。

我正在尝试搜索ID#25,然后能够在单独的工作表上显示所有结果。无需搜索ID号,然后复制并粘贴列。

我尝试做一个vLookup,但是它只给我基于ID的第一个SearchTerm。

2 个答案:

答案 0 :(得分:0)

让我们假设您的搜索ID在E4中,并且您希望搜索结果在F4:F21中。在F4中,放置以下公式,并将其复制到您认为可能具有的最大行数下。

=INDEX(B:B,AGGREGATE(14,6,ROW(B$1:B$7225)/((A$1:A$7255)=E4),ROW(A1)))

我要告诫的是,不要在AGGREGATE函数中使用完整的列引用,因为它会执行数组计算并会减慢速度,但是我相信Scott Craner的评论涵盖了这一点。

话虽如此,我相信使用过滤器是更快的方法。

更新

为了避免显示错误,请将整个内容包装在IFERROR函数中:

=IFERROR(INDEX(B:B,AGGREGATE(14,6,ROW(B$1:B$7225)/((A$1:A$7255)=E4),ROW(A1))),"")

答案 1 :(得分:0)

对于仅7225行的数据而言,速度方面并不太差(使用 Ctrl + Shift + 在长度为100行,宽度为一列的范围内输入:

=INDEX(B1:B7225,SMALL(IF(A1:A7225=4,ROW(A1:A7225)),ROW(INDIRECT("1:100"))))

4更改为所需的搜索值(或具有所需搜索值的单元格)。通过更改100,您可以获得/少于100个结果。

我刚刚针对您填写的非数组版本(例如

)进行了测试
=INDEX(B1:B7225,AGGREGATE(14,6,ROW(B$1:B$7225)/((A$1:A$7255)=4),ROW(A1)))

,数组版本的速度要快一个数量级。