使用公式过滤数组(不使用VBA)

时间:2011-06-27 18:10:15

标签: excel worksheet-function

是否可以使用单个公式过滤数组(不使用自动过滤器,VBA或其他列)?

例如,我有以下电子表格:

   A  | B     | C
 --------------------
1| ID | Class | Value
2| 1  | A     | V1
3| 1  | B     | V2
4| 2  | A     | V3
5| 3  | B     | V4
6| 3  | B     | V5

我想在VLOOKUP中使用此数组的子集。也就是说,我只想匹配那些类为“B”的行。所以我希望我可以使用类似下面的内容

=VLOOKUP(A3, FILTER_FUNC(A:C, B="B"), 3, false)

其中FILTER_FUNC是某种类型的函数或表达式,它返回一个只包含符合条件的行的数组。

4 个答案:

答案 0 :(得分:16)

=VLOOKUP(A2,IF(B1:B3="B",A1:C3,""),1,FALSE)

Ctrl+Shift+Enter进入。

答案 1 :(得分:4)

如果您只想要第一个“B”值,可以这样做,如果您想让它更通用,可以将单元格地址设为“B”。

=INDEX(A2:A6,SUMPRODUCT(MATCH(TRUE,(B2:B6)="B",0)),1)

要基于两列使用它,只需在匹配内部连接:

=INDEX(A2:A6,SUMPRODUCT(MATCH(TRUE,(A2:A6&B2:B6)=("3"&"B"),0)),1)

答案 2 :(得分:2)

如今,在Office 365中,Excel具有所谓的“数组函数”。 filter函数完全可以满足您的需求。不再需要使用CTRL+SHIFT+ENTER,一个简单的enter就足够了。

您今天的问题可以通过使用以下方法简单解决:

=VLOOKUP(A3, FILTER(A2:C6, B2:B6="B"), 3, FALSE)

答案 3 :(得分:1)

听起来你只是想尝试经典的双列查找。 http://www.dailydoseofexcel.com/archives/2009/04/21/vlookup-on-two-columns/

大量的解决方案,最简单的可能是以下(不需要数组公式):

=SUMPRODUCT((Lookup!A:A=Param!A1)*(Lookup!B:B=Param!B1)*(Lookup!C:C))

要翻译您的具体示例,请使用:

=SUMPRODUCT((A1:A3=A2)*(B1:B3="B")*(C1:C3))