问题描述
我已经为此苦苦挣扎了几天,所以我需要帮助:(
假设我有以下数据,其中包含以下列 A:ID
、B:Felony
、C:Recidivism
和 D:Same felony?
。它看起来像这张表:
行 | ID | 重罪 | 再犯? | 同样的重罪? |
---|---|---|---|---|
1 | MX1902 | 窃取 | 没有 | 没有 |
2 | MX1903 | 窃取 | 没有 | 没有 |
3 | MX1901 | 绑架 | 没有 | 没有 |
4 | MX1902 | 牛排 | 是 | 是 |
我一直在尝试做的是确定 A 列 (ID
) 值是否与 上一个 列单元格匹配。如果为 TRUE,则查看最近的匹配行,并确定 B 列 (Felony
)(来自同一匹配行)中单元格的值是否与实际行相同。对于此示例,我一直希望将公式放在 D4 上。
你们知道我如何解决这个问题吗?
解决方法
试试这个公式。
=IF(COUNTIFS($A$2:$A2,$A2,$B$2:$B2,$B2)>1,TRUE,FALSE)
诀窍是 $A$2:$A2 将随着公式向下复制而扩展为 $A$2:$A3 等,始终以公式行结尾(当然从第 2 行开始)。因此结果应始终至少为 1,因为当前行包含在计数中。如果结果更高,则存在重复,IF 函数返回 True。
实际上,COUNTIFS($A$2:$A2,$B2)
返回的是违规次数,因此 COUNTIFS($A$2:$A2,$B2)-1
是之前 次违规的次数。
如果您使用的是 Excel 2010,则可以使用 Aggregate 来查找最近的上一次攻击并将其与当前的攻击进行比较:
=IF(C2="No","No",IF(INDEX(B:B,AGGREGATE(14,6,ROW(A$1:A1)/(A$1:A1=A2),1))=B2,"Yes","No"))
@Variatus 建议的 Countifs 是一个很好的方法来查找是否有以前的进攻 - 我实际上使用 Match 作为替代:
=IF(ISNUMBER(MATCH(A2,A$1:A1,0)),"No")
这将给出“不”,因为尽管之前发生过“偷窃”事件,但最近的犯罪行为是绑架: