在Excel中返回具有特定名称的最后一列的索引

我正在创build一个excelregistry来logging某人已经注册的次数,并返回最后一次注册的date,但是在最后一步遇到问题:

看到这个简化的设置:

在这里输入图像说明

要做到这一点,我假设我需要find名称最后出现的列的索引值,并使用它返回第一行中的date,棘手的部分试图获得该索引值。

我试图使用查找公式,我很确定数组公式是如何可以完成的,但我不确定如何在这个特定的情况下使用它们。

假设你有Excel 2010或更高版本:

=INDEX($1:$1,AGGREGATE(14,6,COLUMN(A$2:D$8)/(A$2:D$8=O2),1))

根据需要复制。

解释如下:

部分:

(A$2:D$8=O2)

只需返回一个布尔TRUE / FALSE值的数组,以确定该范围内的每个单元格是否等于O2中的条目,即使用您的示例:

{TRUE,FALSE,TRUE,FALSE;FALSE,FALSE,FALSE,FALSE;FALSE,TRUE,FALSE,FALSE;FALSE,FALSE,FALSE,TRUE;FALSE,FALSE,FALSE,FALSE;FALSE,FALSE,FALSE,FALSE;FALSE,FALSE,FALSE,FALSE}

那个部分:

COLUMN(A$2:D$8)

返回指定范围内每列的列号,即:

{1,2,3,4}

通过使用包含我们的条件布尔TRUE / FALSE返回值的数组往返这个数组,我们产生一个数组,其唯一的数字条目对应于我们的searchstring(即“James”)所在的列,因为:

COLUMN(A$2:D$8)/(A$2:D$8=O2)

这是:

{1,2,3,4}/{TRUE,FALSE,TRUE,FALSE;FALSE,FALSE,FALSE,FALSE;FALSE,TRUE,FALSE,FALSE;FALSE,FALSE,FALSE,TRUE;FALSE,FALSE,FALSE,FALSE;FALSE,FALSE,FALSE,FALSE;FALSE,FALSE,FALSE,FALSE}

变为:

{1,#DIV/0!,3,#DIV/0!;#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!;#DIV/0!,2,#DIV/0!,#DIV/0!;#DIV/0!,#DIV/0!,#DIV/0!,4;#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!;#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!;#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!}

由于这样的事实,当经过适当的math运算(其中除法为1)时,布尔TRUE / FALSE值被强制为它们的数值等价物( TRUE=1FALSE=0 ),这意味着对于任何数值x:

x/TRUE ⇒ x/1 = x

和:

x/FALSE ⇒ x/0 = #DIV/0!

通过设置AGGREGATE的第一个参数为14(相当于函数LARGE ),第二个参数为6(指示它忽略传递数组中的任何错误),我们可以提取符合我们标准的最大列索引,如下:

AGGREGATE(14,6,COLUMN(A$2:D$8)/(A$2:D$8=O2),1)

这里是:

AGGREGATE(14,6,{1,#DIV/0!,3,#DIV/0!;#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!;#DIV/0!,2,#DIV/0!,#DIV/0!;#DIV/0!,#DIV/0!,#DIV/0!,4;#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!;#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!;#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!},1)

返回4。

剩下的就是把这个值传给INDEX ,这样:

INDEX($1:$1,AGGREGATE(14,6,COLUMN(A$2:D$8)/(A$2:D$8=O2),1))

这是:

INDEX($1:$1,4)

收益:

13/11/2015

按要求。

问候