INDEX函数返回重复错误数据求助:考勤表提取特定项目出勤人员
问题分析与修正方案
原公式的核心问题
- 行偏移错误:INDEX引用的
$B13:$B和MATCH引用的$C14:$C行号差1,匹配到的位置对应到B列时会错行,返回完全不对应的姓名。 - 无法批量提取结果:MATCH仅返回第一个匹配项的位置,无法提取所有符合
construction项目的人员,下拉填充时还会因引用范围变动重复或出错。 - 缺少日期筛选条件:原需求要按“不同日期”筛选,公式未加入日期匹配逻辑,导致结果不符合考勤统计的时间维度要求。
- 引用范围不规范:
$B13:$B这种半固定引用,下拉时起始行号会递增,导致INDEX的查找区域不断偏移,数据混乱。
修正后的公式方案
方案1:使用FILTER函数(Excel 365/2021及以上版本)
假设:
- B列是人员姓名,C列是项目名称,D列是出勤日期
- 要提取某指定日期(比如单元格
$A$2)下,参加construction项目的所有人员:
=FILTER('Form Responses 1'!$B:$B, ('Form Responses 1'!$C:$C="construction")*('Form Responses 1'!$D:$D=$A$2), "无匹配数据")
这个公式会自动返回所有符合双条件的姓名,无重复(只要源数据无重复),且动态更新。
方案2:使用数组公式(旧版Excel)
如果是旧版Excel,用INDEX+SMALL+IF组合实现批量提取,输入后按Ctrl+Shift+Enter确认:
=IFERROR(INDEX('Form Responses 1'!$B:$B, SMALL(IF(('Form Responses 1'!$C:$C="construction")*('Form Responses 1'!$D:$D=$A$2), ROW('Form Responses 1'!$B:$B)), ROW(A1))), "")
下拉填充公式,直到出现空值,即可得到所有符合条件的人员。
额外注意事项
- 确保源数据中
Form Responses 1的列对应正确(比如项目列是否是C列,日期列是否是D列,根据实际调整)。 - 若要提取所有日期中参加
construction的人员并去重,可在FILTER外层套UNIQUE函数:
=UNIQUE(FILTER('Form Responses 1'!$B:$B, 'Form Responses 1'!$C:$C="construction", "无匹配数据"))
内容的提问来源于stack exchange,提问作者Emmanuella Ezike
相关产品推荐
相关产品推荐

