Excel动态提取赛事数据:实现按周保留空行的格式需求
赛事赛程数据提取:保留无数据周次空行的解决方案
问题场景
处理赛事数据时,需将赛程信息动态提取至Excel另一工作表。现有公式已实现大部分需求,但存在行为缺陷:提取结果会跳过无目标队伍(如Air Force)的周次(如第3周),直接提取后续周次数据,而需求是无数据的周次保留空行,匹配目标表格格式。
原有公式及问题
最初使用的公式如下:
=IFERROR(INDEX(Schedule!$A$1:$I$866,MATCH((AGGREGATE(15,3,((Schedule!$F$1:$I$866=$A$1)/(Schedule!$F$1:$I$866=$A$1)*ROW(Schedule!$F$2:$I$866))-ROW(Schedule!$F$1),ROWS($O$2:O2)))-1,Schedule!$A:$A,0),COLUMN(B$1)),"")
该公式的核心问题在于:使用ROWS($O$2:O2)作为AGGREGATE函数的[k]递增值,无数据周次会导致[k]错误递增,进而跳过空行。
尝试的修改方案
尝试添加IF逻辑,仅当周次存在目标队伍数据时,才让AGGREGATE的[k]值递增,IF逻辑如下:
=IF(XLOOKUP(1,((Schedule!$B$2:$B$30=$I9)*((Schedule!$F$2:$F$30=$A$1)+(Schedule!$G$2:$G$30=$A$1))),Schedule!$B$2:$B$30,"")=$I9,*提取数据*,*留空*)
整合后的公式仍未解决问题:
=IF(XLOOKUP(1,((Schedule!$B$2:$B$30=$I9)*((Schedule!$F$2:$F$30=$A$1)+(Schedule!$G$2:$G$30=$A$1))),Schedule!$B$2:$B$30,"")=$I9,IFERROR(INDEX(Schedule!$A$1:$I$30,MATCH((AGGREGATE(15,3,((Schedule!$F$1:$I$30=$A$1)/(Schedule!$F$1:$I$30=$A$1)*ROW(Schedule!$F$2:$I$30))-ROW(Schedule!$F$1),ROWS($O$2:O2)))-1,Schedule!$A:$A,0),COLUMN(C$1)),""),"")
最终解决公式
使用嵌套XLOOKUP的公式完美解决了问题,实现无数据周次保留空行的需求:
=XLOOKUP($B2&$A$1,Schedule!$B$2:$B$30&Schedule!$F$2:$F$30,Schedule!$C$2:$G$30,XLOOKUP($B2&$A$1,Schedule!$B$2:$B$30&Schedule!$G$2:$G$30,Schedule!$C$2:$G$30,"",0),0)
公式逻辑说明
通过**周次单元格值($B2)+目标队伍值($A$1)**的组合作为匹配键,先在主表中匹配该队伍作为主队的赛程;若未匹配到,则继续匹配该队伍作为客队的赛程;两次匹配都失败时返回空值,自然保留无数据周次的空行,不会跳过后续周次。
内容的提问来源于stack exchange,提问作者Link
相关产品推荐
相关产品推荐

