我有以下情况:
Adam White
Adam Black
Adam Black
Ben White
Ben White
Clark Black
Clark Black
我想从excel中得到以下答案:
Adam Both
Ben White
Clark Black
总之,我在左栏中有更多不同的名称,在右栏中有两个值。我想知道出现在左栏中的每个名称是否只有白色,只有黑色或两种颜色都在右栏中关联。
我有以下情况:
Adam White
Adam Black
Adam Black
Ben White
Ben White
Clark Black
Clark Black
我想从excel中得到以下答案:
Adam Both
Ben White
Clark Black
总之,我在左栏中有更多不同的名称,在右栏中有两个值。我想知道出现在左栏中的每个名称是否只有白色,只有黑色或两种颜色都在右栏中关联。
Answers:
您将首先检查COUNTIFS是否同时存在。如果是这样,则返回BothElse,使用VLOOKUP返回一个:
=IF(AND(COUNTIFS(A:A,D1,B:B,"Black"),COUNTIFS(A:A,D1,B:B,"White")),"Both",VLOOKUP(D1,A:B,2,FALSE))
我将建议另一种似乎比使用VLOOKUP更合适的方法。
E1中的公式,向下复制为名称列表:
=IF(SUMPRODUCT((A:A=D1)*(B:B="White")),IF(SUMPRODUCT((A:A=D1)*(B:B="Black")),"Both","White"),"Black")
SUMPRODUCT允许您处理类似于数组公式的多个列,以查找条件的组合。FalseIF测试将结果归零。任何正数都被视为True。
请注意,这是一种非常简化的逻辑,它不会测试错误情况,它依赖于符合规则的数据。嵌套IF逻辑假定每个B列条目都必须为Black或White,并且每个D列查找条目都是包含在A列中的名称。
=CHOOSE((Black)+(White*2), …)在这里使用技巧。扩展到三种或四种颜色会容易得多(但除此之外,还有疯狂的兔子洞)。
我建议不要使用过于复杂的公式,而是使用数据透视表,该数据透视表将在行中为您提供名称,在列中为您提供颜色,并在值中为您提供颜色计数。然后,您可以创建一个简单的公式来确定是否存在特定的组合。
好处是:
使用SUMPRODUCTs甚至数组公式制作和维护嵌套IF更加容易和直观。
如果您有多个可能的值,则展开起来会更容易。
@Eleshar的答案建议使用数据透视表。如果您是从头开始的话,那么这并不是繁琐的工作,它可以提取唯一的名称列表并汇总数据(而数据透视表使这部分变得容易)。但是,仍然需要将数据透视表转换为所需的形式。我将以该建议为基础,并展示另一种尚未获得最终结果的方法。
数据透视表
数据在A和B列中。数据透视表的结果在D1:F5中。如果您从未使用过数据透视表,请选择数据范围,然后从菜单中插入数据透视表。我正在使用LO Calc,因此用户界面看起来有些不同,但是您会看到一个类似于以下内容的向导:
从“可用字段”中,拖动Name到“行”框,Color“列”框,然后Color再次拖动到“ 数据字段”(在Excel中,该框标记为Values)。在Excel中,聚合已经默认为Count。Calc有一个选项可以取消选择行和列的总计。我的旧Excel自动生成这些总计;您可以右键单击它们的标签,然后会出现一个菜单,其中包括删除它们的操作。为数据透视表指定一个不会覆盖数据的目标位置(我选择了D1)。
因此,只需单击几下即可进行选择,最终得到一个表格,就像D:F上一张图像中显示的一样。
翻译成结果
数据透视表为G列中显示的结果提供了基础,这就是我将在此处重点介绍的内容。G3中的公式:
=CHOOSE((E3>0)+(F3>0)*2,"Black","White","Both")
CHOOSE使用一个值作为索引从列表中进行选择;索引值1选择第一个值,2第二个值,依此类推。在此公式中,如果“黑色”列中的计数大于零,则该公式将生成1(真结果的布尔值)。如果“白色”列中的计数大于零,则会生成一个2。因此,如果只有Black,则索引为1; 只有白色,索引是2;两者的索引均为3。
我使用了几乎没有什么不同的方法来解决此问题:
这个怎么运作:
H48和“中的黑色 ” I48。在单元格中,H50编写此数组公式以生成唯一名称列表。
{=IFERROR(INDEX($E$50:$E$56, MATCH(0,COUNTIF($H$49:H49, $E$50:$E$56), 0)),"")}
注意, 用Ctrl+Shift+Enter并填写此公式。
I50并填写。=IFERROR(IF(AND($E$50:$E$56=H50,SUMPRODUCT(($F$50:$F$56=$H$48)+($F$50:$F$56=$I$48))>1),"Both",INDEX(F50:F56,MATCH(H50,E50:E56,0))),"")
注意 :根据需要调整公式中的单元格引用。