答案1
重新表述问题:
A 列包含类别列表。B 列包含子类别列表。我们需要检测并标记 A 中每个类别内的重复子类别。
例如:
Fruit Banana Duplicate!
Fruit Apple
Fruit Banana Duplicate!
Veg Tomato
Veg Potato Duplicate!
Veg Potato Duplicate!
假设:
数据按类别/A 列排序。
解决方案:
首先定义一些名称。将 A 列中的数据定义为数据1并且 B 列中的数据为数据2。
然后在 C2 中:=IF(COUNTIF(组范围,B2)>1,"重复","")
在哪里组范围是 =INDEX(data2,MATCH(A2,data1,0)):INDEX(data2,MATCH(A2,data1,0)+COUNTIF(data1,A2)-1)
如果你想更花哨,实际上定义组范围作为 Excel 中的命名范围。将光标放在 C2 中,单击公式 > 定义名称,然后将上述公式添加到“引用”文本框中。现在,组范围被称为动态命名范围(即根据其所在单元格的位置而变化的命名范围)。它将返回当前所选类别的整个子类别范围。例如,如果子类别是一个数字,您可以在 c 列中输入 =SUM(grouprange)。
答案2
=IF(COUNTIFS(data1, A2, data2, B2)>1,"Duplicate","")
这太简单了!
解释
让我们快速看一下这个公式中发生了什么。首先,它有助于考虑数据的大小(向量维度)。data1 和 data2 分别是 nx 1 的列向量。A2 是一个标量(1 x 1),当像这样进行比较(data1 = A2)时,会生成另一个 nx 1 向量,例如(true;true;false...)。
COUNTIF(data1, A2) 基本上会计算比较向量中真实值的数量,并生成一个等于 data1 中 A2 出现次数的标量值(总和)。COUNTIF年代作用相同,但针对多组标准。因此,计算组合比较向量 AND(data1 = A2, data2 = B) 中真值的数量。