逐行索引值和列值,然后查找列名称

时间:2018-03-11 20:37:32

标签: excel

我有一张excel表格,其格式如下

 Name        1/1/2018  1/8/2018   1/15/2018   1/23/2018   1/30/2018
project1                 dev        dev
project2                            dev         dev        dev
project3       dev       dev

我正在尝试创建一个查询,其中我提供了Name字段,它返回与该名称相关联的行中第一个“dev”实例对应的列名(日期字符串)。我正在尝试创建另一个查询,该查询将返回该行中“dev”的最后一个实例。

例如,对于project1,第一个查询将返回1/8/2018,第二个查询将返回1/15/2018。对于project2,第一个查询将返回1/15/2018,第二个查询将返回1/30/2018。

我已经得到了这个,我认为应该找到project2行中至少一个“dev”的列索引,但即使这样也行不通,即使它确实如此我也是不确定如何找到第一个“dev”与最后一个“dev”以及如何获取列名。

= MATCH(“dev”,INDEX(A1:F100,MATCH(“project2”,A:A,0),0))

如果有人有任何指示我真的很感激。我只是学习excel而且还没有掌握更高级的语法。

谢谢!

2 个答案:

答案 0 :(得分:1)

假设日期按升序排序,如示例所示:

第一场比赛:

=AGGREGATE(15,6,1/(INDEX($A$2:$F$4,MATCH($A8,$A$2:$A$4,0),0)="dev")*$A$1:$F$1,1)

上次匹配:

=AGGREGATE(16,6,1/(INDEX($A$2:$F$4,MATCH($A8,$A$2:$A$4,0),0)="dev")*$A$1:$F$1,1)

=LOOKUP(2,1/(INDEX($A$2:$F$4,MATCH($A8,$A$2:$A$4,0),0)="dev"),$A$1:$F$1)

enter image description here

如果发生日期或列标题未排序,或列标题是文本而非实际日期,请尝试以下操作:

第一场比赛:

=INDEX($A$1:$F$1,1,AGGREGATE(15,6,1/(INDEX($A$2:$F$4,
MATCH($A8,$A$2:$A$4,0),0)="dev")*COLUMN($A$1:$F$1),1))

最后一场比赛

=INDEX($A$1:$F$1,1,AGGREGATE(16,6,1/(INDEX($A$2:$F$4,
MATCH($A8,$A$2:$A$4,0),0)="dev")*COLUMN($A$1:$F$1),1))

=LOOKUP(2,1/(INDEX($A$2:$F$4,MATCH($A8,$A$2:$A$4,0),0)="dev"),$A$1:$F$1)  

enter image description here

答案 1 :(得分:0)

对于第一个并向下拖动:

/video/hd/

对于最后一个并向下拖动:

=INDEX($B$1:$F$1,MATCH("dev",$B2:$F2,0))

在最后一个上使用ctrl + shift + enter作为数组公式输入并向下拖动

Formulas

参考:

https://exceljet.net/formula/get-last-match

编辑:

OP已将后者简化为:

{=INDEX($B$1:$F$1,MAX(IF($B2:$F2="dev",COLUMN($B2:$F2)-COLUMN(INDEX($B2:$F2,1,1))+1)))}