是否可以使用单个公式过滤数组(不使用自动过滤器,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是某种类型的函数或表达式,它返回一个只包含符合条件的行的数组。
答案 0 :(得分:16)
=VLOOKUP(A2,IF(B1:B3="B",A1:C3,""),1,FALSE)
答案 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))