Excel公式需求:根据指定国家和代码获取DATA表最后非空年份列标题
解决Excel中查找对应行最近有数据年份的问题
我来帮你搞定这个需求——要在「DATA AVAILABILITY」工作表里,根据E2的国家和A3的代码,从「DATA」表找到匹配行,返回该行有数据的最近年份表头对吧?下面分两种Excel版本给你对应的公式,还会解释每个部分的作用,方便你理解调整。
适用于Excel 365/2021(动态数组版本)
这个版本用LET函数把公式拆成变量,可读性更强,也不用手动触发数组输入:
=LET( targetRow, FILTER(DATA!$A:$J, (DATA!$A:$A=E2)*(DATA!$B:$B=A3)), yearCols, INDEX(targetRow, 0, SEQUENCE(7,,4)), nonBlankYears, FILTER(yearCols, yearCols<>""), maxYear, MAX(nonBlankYears), INDEX(DATA!$1:$1, MATCH(maxYear, DATA!$1:$1, 0)) )
公式拆解:
targetRow:用FILTER精准定位「DATA」表中Country等于E2且Code等于A3的那一行数据yearCols:提取该行里2000到2006的年份列(对应第4到第10列,用SEQUENCE生成列序号更灵活)nonBlankYears:过滤掉年份列里的空白单元格,只保留有数据的年份值maxYear:从有效年份里取最大值,也就是我们要找的最近年份- 最后用
INDEX+MATCH组合,根据最大年份值找到对应的表头标题
适用于旧版Excel(无动态数组功能)
如果你的Excel版本不支持LET和FILTER,可以用这个数组公式,记得输入完后按Ctrl+Shift+Enter确认(不是普通回车):
=INDEX(DATA!$1:$1, MAX(IF((DATA!$A:$A=E2)*(DATA!$B:$B=A3)*(DATA!$D:$J<>""), COLUMN(DATA!$D:$J), 0)))
公式拆解:
(DATA!$A:$A=E2)*(DATA!$B:$B=A3):先锁定匹配国家和代码的行*(DATA!$D:$J<>""):再筛选出该行里有数据的年份列COLUMN(DATA!$D:$J):返回这些有效列的列号MAX(...):取最大的列号,对应最近的年份列INDEX(DATA!$1:$1, ...):根据列号提取表头的年份标题
额外优化:错误处理
如果匹配到的行所有年份都没有数据,公式会返回错误值。你可以用IFERROR包裹公式,返回友好提示:
比如新版公式改成:
=IFERROR(LET( targetRow, FILTER(DATA!$A:$J, (DATA!$A:$A=E2)*(DATA!$B:$B=A3)), yearCols, INDEX(targetRow, 0, SEQUENCE(7,,4)), nonBlankYears, FILTER(yearCols, yearCols<>""), maxYear, MAX(nonBlankYears), INDEX(DATA!$1:$1, MATCH(maxYear, DATA!$1:$1, 0)) ), "无可用数据")
旧版公式改成:
=IFERROR(INDEX(DATA!$1:$1, MAX(IF((DATA!$A:$A=E2)*(DATA!$B:$B=A3)*(DATA!$D:$J<>""), COLUMN(DATA!$D:$J), 0))), "无可用数据")
内容的提问来源于stack exchange,提问作者franciscofcosta
相关产品推荐
相关产品推荐

