下面是我所拥有的表的示例,我想要做的是根据最后一次出现(不包括今天的日期)获取特定条件的值列中的值。
所以在下面的例子中,我想找到最后一次出现'A'的值,即12。
我认为这可以通过索引匹配完成,但我无法理解它。
例如
Todays Date: 15/12/2013 ---------------------------------| |Date | Criteria | Value |--------------------------------| |12/11/2013 | A | 3 | |16/11/2013 | B | 6 | |27/11/2013 | C | 7 | |3/12/2013 | A | 12 | |5/12/2013 | B | 8 | |15/12/2013 | A | | ----------------------------------
编辑: 我还想补充一点,这个公式将与上表不同。公式中的工作表参考也需要是动态的,它将从另一个单元格中绘制工作表名称。
答案 0 :(得分:6)
我会使用这个公式:
=指数(C:C,MAX(ARRAYFORMULA(匹配(过滤器(A:A,B:B =" A" C:℃下;>"&#34)中,A:A,0))),1)
此公式假设您的数据位于A,B,C列以及每个" A" “条件”列中的值,日期不同。 (如果情况并非如此,那么这个公式不会起作用,见下文。
让我们从外面看一下公式:
现在,如果您希望此公式适用于其他工作表,则应编写,而不是例如:
= index(C:C,... => = index(数据!C:C,......
假设您的数据位于数据工作表中。
如果你希望这张表格是动态的,那就有点棘手了。让我们假设您从G1单元格中获取了工作表名称的值。然后你应该写:
=指数(间接(串连(G1," C:!C&#34)),...
这不是那么漂亮,因为你应该在那个长公式(如前所述)中出现的每个场合都这样做。相反,你可以做一些前期工作。
让我们把这个写入H1单元格:=连接(G1,"!C:C") - 如果在G1单元格中,工作表名称是"数据" ,然后H1单元格应该包含:Data!C:C,类似地你可以添加到
H2 cell:= concatenate(G1,"!A:A"), H3单元格:=连接(G1,"!B:B")
现在你可以写(而且我认为这是你问题的最终答案):
<强> =指数(间接(H1),最大值(ARRAYFORMULA(匹配(过滤器(间接(H2),间接的(H3)=&#34; A&#34;,间接的(H1)&LT;&GT;& #34;&#34;),indirect(H2),0))),1) - 其中H1,H2,H3将引用您的数据表的列。
我希望它有所帮助。
答案 1 :(得分:1)
使用以下公式来实现这一目标。
=QUERY(
B1:D6, // data
"SELECT D // select
WHERE // where clause
C = 'A' AND // first criterium
D IS NOT NULL // second criterium
ORDER BY B DESC // order by
LIMIT 1, // limit
0" // headers
)
for copy/paste
=QUERY(B1:D6, "SELECT D WHERE C = 'A' AND D IS NOT NULL ORDER BY B DESC LIMIT 1", 0)
公式的线索是在ORDER BY
公式中使用LIMIT
和QUERY
选项。 WHERE
条款将首先准备结果。接下来,列B(日期)按降序排列(最高的第一个)。 LIMIT
选项设置要在1
显示的行数。
我为您创建了一个示例文件:Lookup value based on latest matching Criteria
答案 2 :(得分:0)
我很欣赏这是一个稍微陈旧的问题,但我有一种方法可以实现过滤数组的目标,我发现它在概念上更直接,并且比我看到的其他答案更常用,使用vlookup的定义能够选择数组中的第一个匹配值。
问题,已恢复:
假设样本数据: A ... B ... C ... D ... E,由谷歌表格
创建A是表单输入日期 B,C和D是列表中的条目(假设它们是例如产品名称,地理位置和销售日期) E是值
如果为特定产品,地理位置,日期输入新值,那么我希望使用此值优先于相同数据的旧版本。
解: 如果在表单中创建了三个新列: F独特的测试 G测试细胞合并 H独特的细胞
然后在G列中,您创建了要测试的所有单元格的组合(在本例中为B,C和E)
cell G2: "=arrayformula(B2:B & char(9) & C2:C & char(9) & D2:D)"
下一列是您要基于的过滤单元格的重述(在本例中为A中的日期)
cell H2: "=arrayformula(A2:A)"
然后最后在F栏我们实际进行了测试:
cell F2: "=arrayformula(A2:A=vlookup(G2:G,sort({G2:H},2,false),2,false))"
打破这一点,vlookup(vlookup(G2:G,[RANGE],2,false)将G2,G3 ... Gn中的数据与[RANGE]进行比较,[RANGE]是一个由两列组成的虚拟数组,G和H,按照单元格H按降序预先排序。
即。对于G的任何唯一值(测试数据的组合),vlookup将返回H
的最大值最后一部分是对原始数据(A2,A3 ... An)的简单比较,根据它是否是唯一值的最新版本返回TRUE或FALSE。
如果需要,最后一步是创建一个包含"=filter('Form Responses 1'!A:E,'Form Responses 1'F:F=TRUE)
的新工作表,以便在没有旧版本的情况下重新创建数据。
希望这有帮助。