当前,当我使用Vlookup时,它会提供第一次匹配的数据。
我按日期将数据接收到电子表格中,即每个项目都存在一条记录,其中包含状态字段的值。我在项目级别的新标签页中建立了合并报告,我需要为每个项目填充“状态”列。
状态字段值可能会保持几天不变,但会在特定日期更改。如果我使用VLOOKP(Project#,SampleData!Project#:Status,7,0),我将获得第一场比赛,即结果很可能始终为'In-Progress'
如何在VLOOKUP中添加另一个条件以在匹配的项目#上搜索最大日期并返回结果?
Google表格Link
答案 0 :(得分:1)
如果项目按日期升序排列,则可以使用LOOKUP
函数来获取最新状态:
=ArrayFormula(LOOKUP(2,1/(A11=$B$2:$B$7),$H$2:$H$7))
如果未排序,请尝试以下操作:
=ArrayFormula(LOOKUP(2,1/((A11=$B$2:$B$7)*(MAX($A$2:$A$7*(A11=$B$2:$B$7))=$A$2:$A$7)),$H$2:$H$7))
说明:
如果未找到搜索键,则使用LOOKUP
功能,查找将返回范围较小的值中最接近的匹配键。在第一个公式LOOKUP
中搜索值2
,而表达式1/(A11=$B$2:$B$7)
返回带有错误的数组和错误数组{1/TRUE,1/TRUE,1/TRUE,1/FALSE,1/FALSE,1/FALSE} => {1,1,1,DIV/0,DIV/0,DIV/0}
,因此LOOKUP
从范围$ H $ 2的第三行返回值:$ H $ 7。
在第二个公式中,以此类推。
答案 1 :(得分:1)
利用ARRAYFORMULA
函数,您可以为您的范围构建一个search_key:
这基本上会将Boolean
函数(EQ
)的=
结果乘以所有可能的日期,然后取最大值。
注意:布尔值也用1
的{{1}}和TRUE
的{{1}}表示,因此每个不对应项目代码的日期都将产生一个很老的时间戳。
然后,我将其用作search_key以获取Project代码子集范围(使用0
函数构建的状态)的状态(col 8):
FALSE
向下拖动每个项目代码的公式将返回其最后状态。
如果您更喜欢使用IF
公式而不是=ARRAYFORMULA(
VLOOKUP(
MAX($A$2:$A$7*(A11=$B$2:$B$7)),
IF(A11=$B$2:$B$7, $A$2:$H$7),
8,
FALSE
)
)
,请参见以下示例:
该查询基于一个子查询,该子查询基本上利用QUERY
聚合函数来查找特定项目代码的最大日期。
然后,它将最大日期和项目代码用作键,以确保排除属于其他项目代码的日期重复。</ p>
VLOOKUP
在此处向下拖动公式将返回项目的最后状态。