首先,我承认我对 Excel 确实一无所知,但我曾尝试在 Excel 书籍和 Google 中寻找解决方案。
以下是我想做的事情:
我有一个很长的电子表格,总共有 7 列,但我最感兴趣的只有两列。这是一个示例 CSV,它比我的实际数据集简单得多,但搜索/排序是类似的:
John, Apple
Dave, Apple
Dave, Orange
Steve, Apple
Steve, Orange
Steve, Kiwi
Bob, Apple
Bob, Banana
我感兴趣的是提取满足以下条件的整行(所有列):
[“苹果”]或者[“苹果”和“橙子”]不是[“苹果”和“橙子”和还要别的吗]不是[“苹果”和任何非橙色的东西]
因此,使用上述 CSV,我将获得 John 和 Dave 的全部行,但不会获得 Steve 和 Bob 的全部行。
我开始手动执行此操作,并且很可能在这个问题有答案时完成,但我想知道这一点以供将来参考。
谢谢!
答案1
这是使用三个辅助列的方法。其思路是,您可以过滤1
第三个辅助列中的值,以获取所需的行。
第一个辅助列(C
我的示例中的列):给出该人的“Apple”条目数。
=COUNTIFS($A$1:$A$8,A1,$B$1:$B$8,"Apple")
第二个辅助列(列D
):提供该人的记录数。
=COUNTIF($A$1:$A$8,A1)
第三个辅助列(列E
):对于符合您条件的人,返回 1。
=IF(D1=1,IF(C1>0,1,0),IF(AND(D1=2,C1=1),IF(SUMPRODUCT(($A$1:$A$8=A1)*($B$1:$B$8="Orange"))=1,1,0),0))
然后只需过滤1
列中的 s即可E
。
如果需要,您可以将这些辅助列压缩为一个辅助列,但公式会变得重复且几乎不可能阅读。
答案2
因此,基本上,一个人的 Apple 和 Orange 条目数必须等于一个人的所有条目数。因此,您可以这样做:
- 在表格中的某处添加新列。
- 在公式中输入是第一个包含名称的单元格,
=A2&"###"&B2
是第一个包含水果的单元格,是分隔符,该分隔符不会在名称或水果列中使用。(如果恰巧在那里使用,只需将其替换为这些列中不存在的其他内容即可。)A2
B2
###
###
- 将此公式拖到整个列。
- 在表格中的某处添加另一列。
- 在公式中输入
=(COUNTIF($C:$C,$A2&"###Apple") + COUNTIF($C:$C,$A2&"###Orange")) = COUNTIF($A:$A,$A2)
您C
在步骤 1 中刚刚添加的列,A
仍然是具有名称的列,并且###
是您在步骤 2 中使用的相同占位符。 - 将此公式拖到整个列上。
结果:所有“无效”行都应包含“FALSE”,所有“有效”行都应包含“TRUE”。
警告:一旦您开始删除条目,“FALSE”可能会变成“TRUE” - 因此您可能需要在对数据进行任何类型的编辑之前创建整个列的硬拷贝。
嗨嗨。