假设我有一个 Google 电子表格,可以跟踪特定客人是否参加聚会。活动表中的每一行都记录了客人姓名以及他们是“到达”还是“离开”。另一张表“存在”应显示当前参加聚会的人员。我如何构建一个公式来检查是否存在为每位“到达”的客人显示“出发”的活动行?我一直在考虑尝试使用 MAXIFS,或者 FILTER,但我不知道如何构造公式来完成我需要的操作。
活动表
时间 | 人 | 行动 |
---|---|---|
7:01 下午 | 约翰 | 到达 |
8:03pm | 约翰 | 离开了 |
8:17pm | 苏西 | 到达 |
9:12pm | 约翰 | 到达 |
出席表(假设现在时间为晚上 9:30)
人 | 现在呈现 |
---|---|
约翰 | 是的 |
苏西 | 是的 |
如果你不需要比较时间,只是为了找到最后一个值,你可以使用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")))))
我使用第三个表 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 的答案可能更适合未来和稳健,但这个答案也有效。