我正在尝试创建一个excel寄存器,用于计算某人注册的次数,并返回上一次出现的日期但是在最后一步遇到问题:
请参阅此简化设置:
要做到这一点,我假设我需要找到名称最后出现的列的索引值,并使用它来返回第一行中的日期,这是一个棘手的部分,试图获取该索引值。 / p>
我尝试使用查找公式,我很确定数组公式是如何实现的,但我不确定如何在这种特定情况下使用它们。
答案 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=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
根据需要。
此致