Excel按行值定位后查找行内首次/末次dev对应的列名(日期)
嘿,我来帮你搞定这两个Excel查询需求!针对你提到的场景——根据输入的Name字段值,返回对应行中首个/末次出现"dev"的日期列名,我整理了两个实用的公式方案:
1. 查找首个出现"dev"的日期列名
假设你的表格结构是:
- Name字段在A列(比如A2是project1,A3是project2)
- 日期列的表头在第1行(B1到Z1是日期字符串,比如1/8/2018、1/15/2018)
- 数据区域是B列到Z列(对应每行的状态值,比如"dev")
固定Name查询(比如直接查project1)
用这个公式:
=INDEX($B$1:$Z$1,MATCH("dev",INDEX($B:$Z,MATCH("project1",$A:$A,0),0),0))
公式拆解:
MATCH("project1",$A:$A,0):找到project1所在的行号INDEX($B:$Z,行号,0):提取该行从B到Z的所有数据MATCH("dev",...,0):在提取的行数据中找到第一个"dev"的位置INDEX($B$1:$Z$1,...):根据位置返回对应的日期表头
动态输入Name查询(比如在D1单元格输入要查询的Name)
把公式改成动态引用并增加错误处理:
=IFERROR(INDEX($B$1:$Z$1,MATCH("dev",INDEX($B:$Z,MATCH(D1,$A:$A,0),0),0)),"无匹配结果")
加IFERROR是为了避免找不到目标Name或该行没有"dev"时出现错误值,会返回自定义提示。
2. 查找末次出现"dev"的日期列名
同样基于上面的表格结构,用LOOKUP函数可以轻松定位最后一个匹配项:
固定Name查询(直接查project1)
公式:
=LOOKUP(2,1/(INDEX($B:$Z,MATCH("project1",$A:$A,0),0)="dev"),$B$1:$Z$1)
公式拆解:
INDEX($B:$Z,MATCH("project1",$A:$A,0),0)="dev":生成一个由TRUE/FALSE组成的数组,对应该行每个单元格是否为"dev"1/(...):把TRUE转成1,FALSE转成#DIV/0!错误值LOOKUP(2,1/..., $B$1:$Z$1):LOOKUP会忽略错误值,找到最后一个等于1的位置,返回对应的日期表头
动态输入Name查询
改成动态引用并增加错误处理:
=IFERROR(LOOKUP(2,1/(INDEX($B:$Z,MATCH(D1,$A:$A,0),0)="dev"),$B$1:$Z$1),"无匹配结果")
示例验证
- 输入Name为
project1时,首个结果返回1/8/2018,末次结果返回1/15/2018 - 输入Name为
project2时,首个结果返回1/15/2018(符合你给出的示例)
内容的提问来源于stack exchange,提问作者Margie Roginski
相关产品推荐
相关产品推荐

