在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=1
, FALSE=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
按要求。
问候