You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

求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)

公式解释:

  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组成的数组,对应每一列是否存在目标值。
  2. 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))), "无匹配")

公式解释:

  1. IF(Sheet1!$A$2:$XFD$6=A2, COLUMN(Sheet1!$A$2:$XFD$6), 0)
    • 遍历Sheet1第2-6行的所有单元格,若单元格值等于A2,则返回该单元格的列号;否则返回0。
  2. MAX(...)
    • 从返回的列号数组中取最大值,也就是目标值最后一次出现的列的位置。
  3. INDEX(Sheet1!$1:$1, ...)
    • 根据列号取出Sheet1第1行对应的日期表头。
  4. IFERROR(..., "无匹配")
    • 处理Sheet2中存在Sheet1没有的数值的情况,返回自定义提示。

注意事项

  • 公式中的$XFD$6是Excel的最大列范围,如果你预计不会用到这么多列,可以换成更小的范围(比如$ZZ$6),减少计算量;
  • 旧版Excel必须按Ctrl+Shift+Enter输入数组公式,否则无法正常计算;
  • 若Sheet1后续新增列,公式会自动覆盖(因为我们用了足够大的列范围),无需手动调整公式。

内容的提问来源于stack exchange,提问作者Nama Choco

火山引擎 最新活动