求Excel中查找值最后出现位置对应表头行内容的跨表公式
解决Excel全表查找值最后出现位置的对应日期表头问题
嘿,这个需求我帮你捋清楚并给出具体公式!先明确咱们的场景:
- Sheet1:第1行是日期表头(会不断新增列),第2-6行是对应日期下的数值;
- Sheet2:A列包含Sheet1第2-6行的所有数值(可能重复),需要在B列返回每个数值最后一次出现在Sheet1时所在列的日期表头。
下面分两种Excel版本给出解决方案:
一、Excel 365/2021(支持动态数组函数)
在Sheet2的B2单元格输入以下公式,下拉填充即可:
=XLOOKUP(TRUE, BYCOL(Sheet1!$A$1:$XFD$6, LAMBDA(col, A2=INDEX(col,2,1):INDEX(col,6,1))), Sheet1!$A$1:$XFD$1, "", 0, -1)
公式解释:
BYCOL(Sheet1!$A$1:$XFD$6, LAMBDA(col, A2=INDEX(col,2,1):INDEX(col,6,1)))- 遍历Sheet1的每一列(从A到XFD,覆盖Excel所有列),检查当前列的第2-6行是否包含Sheet2 A2的数值,返回一个由TRUE/FALSE组成的数组,对应每一列是否存在目标值。
XLOOKUP(TRUE, ..., Sheet1!$A$1:$XFD$1, "", 0, -1)- 从右往左反向查找(最后参数
-1)第一个TRUE值,返回对应的Sheet1第1行日期——这就是目标值最后出现的列的表头。
- 从右往左反向查找(最后参数
二、旧版Excel(不支持动态数组,需用数组公式)
在Sheet2的B2单元格输入以下公式,然后按Ctrl+Shift+Enter完成数组公式输入(输入后公式会自动被{}包裹,不要手动添加),再下拉填充:
=IFERROR(INDEX(Sheet1!$1:$1, MAX(IF(Sheet1!$A$2:$XFD$6=A2, COLUMN(Sheet1!$A$2:$XFD$6), 0))), "无匹配")
公式解释:
IF(Sheet1!$A$2:$XFD$6=A2, COLUMN(Sheet1!$A$2:$XFD$6), 0)- 遍历Sheet1第2-6行的所有单元格,若单元格值等于A2,则返回该单元格的列号;否则返回0。
MAX(...)- 从返回的列号数组中取最大值,也就是目标值最后一次出现的列的位置。
INDEX(Sheet1!$1:$1, ...)- 根据列号取出Sheet1第1行对应的日期表头。
IFERROR(..., "无匹配")- 处理Sheet2中存在Sheet1没有的数值的情况,返回自定义提示。
注意事项
- 公式中的
$XFD$6是Excel的最大列范围,如果你预计不会用到这么多列,可以换成更小的范围(比如$ZZ$6),减少计算量; - 旧版Excel必须按
Ctrl+Shift+Enter输入数组公式,否则无法正常计算; - 若Sheet1后续新增列,公式会自动覆盖(因为我们用了足够大的列范围),无需手动调整公式。
内容的提问来源于stack exchange,提问作者Nama Choco




