2026-06-12 10:44:42
LOOKUP函数可通过构建特殊条件数组实现多条件查找,其核心逻辑是利用0/()结构将多条件乘积转换为0或错误值,再通过LOOKUP的查找特性返回匹配结果。
一、多条件查找的LOOKUP函数公式在单元格I2中输入以下公式,并向下拖曳填充:
=LOOKUP(,0/(($A$2:$A$37=F2)*(INT($C$2:$C$37)<=G2)*(INT($D$2:$D$37)>=G2)),$B$2:$B$37)或简化后的版本:
=LOOKUP(,0/(($A$2:$A$37=F2)*(INT($C$2:$C$37)<=G2)*(INT($D$2:$D$37)>=G2)),$B$2:$B$37)
条件构建部分
($A$2:$A$37=F2):检查A列员工姓名是否等于F2单元格的值。
INT($C$2:$C$37)<=G2:将C列日期去除时间后缀后,判断是否早于等于G2的日期。
INT($D$2:$D$37)>=G2:将D列日期去除时间后缀后,判断是否晚于等于G2的日期。
三个条件通过乘法连接:只有同时满足所有条件时结果为1,否则为0。
0/()结构的作用
将条件数组作为分母,生成0/(条件数组)的结果:
当条件为TRUE(即1)时,结果为0/1=0;
当条件为FALSE(即0)时,结果为0/0(错误值)。
最终得到一个由0和错误值组成的数组。
LOOKUP函数的查找逻辑
省略第一个参数(查找值)时,默认查找小于等于1的最大值。
由于数组中只有0和错误值,LOOKUP会忽略错误值,返回最后一个0对应的$B$2:$B$37中的值(即请假类型)。
日期处理:C列和D列的日期包含时间后缀(如2023/1/1 8:00),需用INT()函数去除时间部分,确保日期比较的准确性。

数值转换:*1或INT()函数可将文本型日期转换为数值型,避免比较时出错。
唯一性保证:公式假设每个员工在指定日期范围内只有一种请假类型。若存在重复,可能返回错误结果。
简化版本:原公式中的1*INT()可省略*1,直接使用INT()即可完成日期转换和比较。
=LOOKUP(,0/(($A$2:$A$37=F2)*(INT($C$2:$C$37)<=G2)*(INT($D$2:$D$37)>=G2)),$B$2:$B$37)扩展性建议:若需处理更复杂条件(如模糊匹配),可结合IF或MATCH函数预处理条件数组。
适用场景:多条件精确匹配查询,尤其适合数据量较大且条件逻辑固定的表格。
注意事项:
确保条件范围(如$A$2:$A$37)与结果范围(如$B$2:$B$37)行数一致。
若数据可能变动,建议将范围改为动态引用(如OFFSET或INDEX结合COUNTA)。
错误处理:可嵌套IFERROR函数避免公式返回#N/A错误。
通过以上方法,LOOKUP函数可高效实现多条件查找,其核心在于将多条件转化为0/错误值数组,再利用LOOKUP的查找特性定位结果。