Excel公式实现:在日历中标记有规划休假的主管
Excel数组公式返回空值的解决方案
问题根源
原公式中使用AND()函数在数组环境下无法正确工作:AND()会将逐行的条件判断结果合并为一个单一的布尔值,而非保留逐行的数组结果,导致SMALL()函数无法定位符合条件的行号,最终返回空值。
解决方案
1. 适用于Excel 365/2021(支持动态数组)
使用FILTER()函数直接提取符合条件的结果,无需手动数组输入:
=IFERROR(FILTER($B:$B,($D:$D="Supervisor")*($I:$I="Plotted")*($C:$C=$P$1)),"")
- 逻辑说明:用
*替代AND(),逐行判断三个条件是否同时成立(三个条件均为TRUE时结果为1,否则为0),FILTER()会自动返回所有符合条件的主管姓名(假设$B:$B是姓名列,对应原公式的第2列)。
2. 适用于旧版Excel(需数组输入)
修改原公式,用*替换AND()实现逐行条件判断,然后按Ctrl+Shift+Enter输入数组公式:
=IFERROR(INDEX($A:$I,SMALL(IF(($D:$D="Supervisor")*($I:$I="Plotted")*($C:$C=$P$1),ROW($D:$D)),ROW(1:1)),2),"")
- 逻辑说明:
($D:$D="Supervisor")*($I:$I="Plotted")*($C:$C=$P$1)返回逐行的布尔数组(1表示符合所有条件),IF()提取对应行号,SMALL()按顺序取出行号,最后INDEX()提取第2列的姓名。
优化建议
- 避免整列引用(如
$D:$D),改为实际数据范围(例如$D$2:$D$1000),减少公式运算量。 - 确认
$P$1的日期格式与$C:$C列的日期格式完全一致,避免因格式不匹配导致条件判断失效。
内容的提问来源于stack exchange,提问作者Brenddd
相关产品推荐
相关产品推荐

