You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用+运算符实现OR逻辑的Filter函数无法匹配预期结果

使用+运算符实现OR逻辑的Filter函数无法匹配预期结果

我明白你现在遇到的困扰:你想在Excel的FILTER函数里用+运算符实现OR逻辑,筛选出开始日期或结束日期落在指定月份的活跃项目,但公式运行后却没有找到任何匹配项。先结合你的表格情况来分析问题:

你的表格场景

  • 项目名称、开始日期、结束日期分别在A、B、C列
  • E-H列的第1行是月份数字,第2行是月份名称
  • 公式写在E3:H3区域,目标是返回对应月份的活跃项目

表格截图

问题根源:公式的逻辑判断错误

你当前的公式是:

FILTER($A$2:$A$5,MONTH($B$2:$B$5)=E1+MONTH($C$2:$C$5)=E1)

这个写法的逻辑完全不对:Excel会先计算MONTH($B$2:$B$5)=E1得到一组布尔值(TRUE/FALSE),然后和MONTH($C$2:$C$5)=E1的布尔值直接相加,最后再把相加的结果和E1做等于判断——这根本不是你想要的“满足任一条件”的OR逻辑,自然得不到正确结果。

正确的实现方式

要实现“开始日期在目标月份 或 结束日期在目标月份”的OR逻辑,你可以用以下两种方法:

方法1:用+运算符实现布尔OR逻辑(推荐)

在Excel中,布尔值TRUE会被当作1,FALSE当作0。所以只要两个条件相加的结果≥1,就表示至少满足一个条件。你需要把两个条件分别用括号包裹,再判断结果大于0:

=FILTER($A$2:$A$5,(MONTH($B$2:$B$5)=E1)+(MONTH($C$2:$C$5)=E1)>0)

方法2:用BYROW+OR函数(更直观)

如果觉得+的写法不够易懂,可以用BYROW遍历每一行的日期,用OR判断该行是否满足任一条件:

=FILTER($A$2:$A$5,BYROW($B$2:$C$5,LAMBDA(row,MONTH(INDEX(row,1))=E1 OR MONTH(INDEX(row,2))=E1)))

补充说明

如果你的需求是“项目在该月份处于活跃状态”(比如项目跨月,开始在当月之前、结束在当月之后,这种情况也属于活跃),上面的逻辑已经完全覆盖了——只要开始日期或结束日期在当月,或者项目跨月覆盖当月,都会被筛选出来,完全符合你的预期。

备注:内容来源于stack exchange,提问作者user1972515

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 07:37:58