Excel多匹配行筛选及子行匹配工时填充公式求助
解决MATCH仅返回首个匹配行的问题
针对你在Excel中匹配周数后无法获取所有匹配行子集的需求,这里提供两种实用方案:
方案1:使用FILTER函数(Excel 365/2021及以上)
FILTER可以直接返回所有符合条件的行/列子集,完美替代只能取首个匹配的MATCH。
假设数据结构:
2023-raw:A列为周数(vecka),B~Z列为不同日期的工时数据,第一行是日期列名2023:A2为当前行的目标周数,B1为当前列的目标日期列名
需求1:求和所有匹配周+匹配日期的工时
公式:
=SUM(FILTER(2023-raw!B:Z, (2023-raw!A:A=A2)*(2023-raw!B1:Z1=B1), 0))
逻辑:
(2023-raw!A:A=A2)筛选出周数匹配的所有行(2023-raw!B1:Z1=B1)筛选出日期列名匹配的列- 两个条件同时满足时,FILTER返回对应单元格,SUM计算总工时
需求2:提取首个匹配周+匹配日期的工时
公式:
=INDEX(FILTER(2023-raw!B:Z, 2023-raw!A:A=A2, 0), , MATCH(B1, 2023-raw!B1:Z1, 0))
逻辑:先筛选出目标周的所有行,再用MATCH定位目标日期列,最后用INDEX提取对应值
方案2:数组公式兼容旧版Excel(无FILTER功能)
如果你的Excel版本不支持FILTER,用INDEX+SMALL+IF组合遍历所有匹配行:
公式(输入后按Ctrl+Shift+Enter触发数组运算):
=SUM(INDEX(2023-raw!B:Z, SMALL(IF(2023-raw!A:A=A2, ROW(2023-raw!A:A)-ROW(2023-raw!A2)+1), ROW(INDIRECT("1:"&COUNTIF(2023-raw!A:A, A2)))), MATCH(B1, 2023-raw!B1:Z1, 0)))
逻辑:
IF(2023-raw!A:A=A2, ROW(...))生成所有周数匹配的行号列表SMALL(...)按顺序逐个提取匹配行的行号INDEX根据行号和列匹配结果提取工时,SUM求和
简化方案(唯一匹配场景)
如果2023-raw中每个「周数+日期」组合唯一,用XLOOKUP一步到位:
=XLOOKUP(1, (2023-raw!A:A=A2)*(2023-raw!B1:Z1=B1), 2023-raw!B:Z, 0)
内容的提问来源于stack exchange,提问作者Jesper.Lindberg
相关产品推荐
相关产品推荐

