如何根据多个条件执行VLOOKUP并返回最新的行结果?

时间:2020-10-15 21:06:27

标签: google-sheets google-sheets-formula

当前,当我使用Vlookup时,它会提供第一次匹配的数据。

我按日期将数据接收到电子表格中,即每个项目都存在一条记录,其中包含状态字段的值。我在项目级别的新标签页中建立了合并报告,我需要为每个项目填充“状态”列。

状态字段值可能会保持几天不变,但会在特定日期更改。如果我使用VLOOKP(Project#,SampleData!Project#:Status,7,0),我将获得第一场比赛,即结果很可能始终为'In-Progress'

如何在VLOOKUP中添加另一个条件以在匹配的项目#上搜索最大日期并返回结果?

Google表格Link

Sample Raw Data

Consolidated View

2 个答案:

答案 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))

enter image description here

说明:

如果未找到搜索键,则使用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)

使用VLOOKUP

利用ARRAYFORMULA函数,您可以为您的范围构建一个search_key:

这基本上会将Boolean函数(EQ)的=结果乘以所有可能的日期,然后取最大值。

注意:布尔值也用1的{​​{1}}和TRUE的{​​{1}}表示,因此每个不对应项目代码的日期都将产生一个很老的时间戳。

然后,我将其用作search_key以获取Project代码子集范围(使用0函数构建的状态)的状态(col 8):

FALSE

向下拖动每个项目代码的公式将返回其最后状态。

使用QUERY

如果您更喜欢使用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

在此处向下拖动公式将返回项目的最后状态。

参考文献

VLOOKUP

QUERY

IF