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

时间:2015-11-13 12:25:59

标签: excel excel-formula

我正在尝试创建一个excel寄存器,用于计算某人注册的次数,并返回上一次出现的日期但是在最后一步遇到问题:

请参阅此简化设置:

enter image description here

要做到这一点,我假设我需要找到名称最后出现的列的索引值,并使用它来返回第一行中的日期,这是一个棘手的部分,试图获取该索引值。 / p>

我尝试使用查找公式,我很确定数组公式是如何实现的,但我不确定如何在这种特定情况下使用它们。

1 个答案:

答案 0 :(得分:1)

假设您拥有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的数组来回显这个数组,我们生成一个数组,其唯一的数字条目对应于我们的搜索字符串(即“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!}

由于以下事实:当进行适当的数学运算(其中除法为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

根据需要。

此致