如何在FILTER函数中使用列条件区域而非单个单元格筛选数据
数据表格
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| Revenue | ColCrit1 | ColCrit2 | ||||
| 2 | Brand A | P1 | 500 | Brand A | P1 | |
| 3 | Brand A | P2 | 100 | Brand B | P3 | |
| 4 | Brand A | P2 | 800 | Brand D | ||
| 5 | Brand B | P1 | 90 | |||
| 6 | Brand C | P4 | 45 | |||
| 7 | Brand C | P2 | 600 | Result | 500 | |
| 8 | Brand D | P1 | 900 | 90 | ||
| 9 | Brand D | P1 | 125 | 900 | ||
| 10 | Brand D | P3 | 70 | 125 | ||
| 11 | Brand D | P3 | 842 | 70 | ||
| 12 | Brand E | P4 | 300 | 842 |
问题描述
我希望基于多列条件筛选数据列表,条件由用户输入在Range E2:E4和Range F2:F4区域中。
目前我仅能编写基于单个单元格的筛选公式:
F7 = FILTER(C2:C12,IF(E2="",1,(A2:A12=E2))*IF(F2="",1,(B2:B12=F2)))
请问是否存在可应用区域条件的公式?例如类似以下形式的公式:
F7 = FILTER(C2:C12,IF(E2:E4="",1,(A2:A12=E2:E4))*IF(F2:F4="",1,(B2:B12=F2:F4)))
解决方案
可以通过BYROW结合SUMPRODUCT或OR实现多组条件的筛选,核心是判断每行数据是否匹配任意一组E/F列的条件(空值默认匹配对应列所有内容)。
公式1(兼容多数Excel版本,需按Ctrl+Shift+Enter确认)
=FILTER(C2:C12,BYROW(A2:B12,LAMBDA(row,SUMPRODUCT( IF(E2:E4="",1,(INDEX(row,1)=E2:E4))* IF(F2:F4="",1,(INDEX(row,2)=F2:F4)) )>0)))
公式2(Excel 365/2021+ 简化版,直接回车即可)
=FILTER(C2:C12, BYROW(A2:B12,LAMBDA(r, OR( (E2:E4=""&r[0])*(F2:F4=""&r[1]) ) )) )
逻辑说明
BYROW(A2:B12, LAMBDA(row, ...)):遍历A/B列的每一行数据- 对每行数据,判断是否匹配E2:E4和F2:F4中的任意一组条件:
- 空条件通过
IF(E2:E4="",1,...)或""&r[0]处理为匹配对应列所有内容 - 用
SUMPRODUCT求和或OR判断是否存在至少一组匹配的条件
- 空条件通过
FILTER根据上述判断结果,提取C列对应的Revenue数据
内容的提问来源于stack exchange,提问作者Michi
相关产品推荐
相关产品推荐

