对于给定列中的每个唯一单元格值,查找该值的最后一次出现,如果它满足给定条件,则显示它

问题描述 投票:0回答:2

假设我有一个 Google 电子表格,可以跟踪特定客人是否参加聚会。活动表中的每一行都记录了客人姓名以及他们是“到达”还是“离开”。另一张表“存在”应显示当前参加聚会的人员。我如何构建一个公式来检查是否存在为每位“到达”的客人显示“出发”的活动行?我一直在考虑尝试使用 MAXIFS,或者 FILTER,但我不知道如何构造公式来完成我需要的操作。

活动表

时间 行动
7:01 下午 约翰 到达
8:03pm 约翰 离开了
8:17pm 苏西 到达
9:12pm 约翰 到达

出席表(假设现在时间为晚上 9:30)

现在呈现
约翰 是的
苏西 是的
google-sheets filter lookup maxifs
2个回答
1
投票

如果你不需要比较时间,只是为了找到最后一个值,你可以使用XLOOKUP:

=IF(XLOOKUP(E2,B:B,C:C,,,-1)="Arrived","Yes","No")

作为一个数组,所以它“扩展到”整个列:

=ARRAYFORMULA(IF(E2:E="","",IF(XLOOKUP(E2:E,B:B,C:C,,,-1)="Arrived","Yes","No")))

并且,如果您还想获取名称,并生成用新名称扩展的整个表:

=LET(names,TOCOL(UNIQUE(B2:B),1),
BYROW(names,LAMBDA(name,
HSTACK(name,IF(XLOOKUP(name,B:B,C:C,,,-1)="Arrived","Yes","No")))))


0
投票

我使用第三个表 People 以及 FILTER、SUMPRODUCT 和 INDEX 函数计算出了这个结果。发帖以防万一这有助于某人将来学习。我的人员表如下所示:

状态
约翰 (功能如下)
苏西 (功能)
罗斯 (功能)

功能:

=IFERROR(INDEX(FILTER(Activity!$C:$C, Activity!$B:$B=A2),SUMPRODUCT(Activity!$B:$B=A2)),"")

这基本上是说“使用 Filter 函数在“活动”表中查找与同一行中某个人的姓名相对应的值(到达或离开),该值等于此表中此人的姓名。然后创建一个索引该人的名字在活动表 (INDEX) 中出现的次数并获取最后一个条目。”我通过说“获取 Activity 中名称与该名称匹配的条目的总和并将其用作 Index 函数中的第二个值”来构建“最后一个条目”。 IFERROR 部分只是说“如果该人既没有到达也没有离开,则将该单元格留空”。

最重要的是,我在状态表上做了一个过滤功能......

=FILTER(People!$A:$A,People!$B:$B="Arrived")

...这基本上是说“从“人员”表中筛选状态为“已到达”的人员的结果”。我从这个视频得到了帮助。我认为 @martin 的答案可能更适合未来和稳健,但这个答案也有效。

© www.soinside.com 2019 - 2024. All rights reserved.