编辑#2
在您提供的第二个公式的嵌套 IF 函数中发现错误。
在公式中您尝试使用IF(IF(A)+IF(B)=2,0,1),但我认为正确的方法应该是IF((IF(A)+IF(B))=2,0,1)。
根据您提供的示例工作表,在单元格J2 中输入以下公式:
=INDEX(A$2:A$861,MATCH(0,COUNTIF(J$1:J1,A$2:A$861)+IF((IF(COUNTIF(B$2:B$243,A$2:A$861)>0,1,0)+IF(COUNTIF(C$2:C$162,A$2:A$861)>0,1,0)+IF(COUNTIF(D$2:D$132,A$2:A$861)>0,1,0)+IF(COUNTIF(E$2:E$118,A$2:A$861)>0,1,0)+IF(COUNTIF(F$2:F$112,A$2:A$861)>0,1,0)+IF(COUNTIF(G$2:G$94,A$2:A$861)>0,1,0)+IF(COUNTIF(H$2:H$81,A$2:A$861)>0,1,0))=7,0,1),0))
请注意,它是一个数组公式,所以在输入上述公式后需要进行以下操作:
选择范围,按CONTROL + U然后按COMMAND + RETURN kbd>
如果上述方法不适合您:
选择范围,按 CONTROL + U 然后按 COMMAND + SHIFT + RETURN
如果您仍然不清楚,请阅读此内容:How to Use Array Formula in Excel Mac(谁知道在 Excel for Mac 中使用数组公式是如此痛苦......)
向下拖动公式,直到列表返回 #N/A 错误,这意味着您已找到所有常见值。
假设您将这个常用值列表命名为 List,我在 Excel 2016 for Windows 中的经验是您返回源表,突出显示整个表,进入Home Tab下的Conditional Formatting,进入New Rule...,进入最后一个选项,输入如下公式作为格式化规则:
=MATCH(A2,List,0)>0
鉴于Excel 2011 and Excel 2016 for Mac 不支持 Power Query,请忽略以下使用 Power Query 的方法。在这种情况下,FYI 电源查询方法比上述数组公式方法要快得多......
从您的帖子和您提供的示例来看,我认为您希望找到 all 8 列中出现的常见值,这意味着您将忽略 7、6、5 中出现的值或更少的列。
鉴于您正在处理大型数据集 (860 x 8),我建议使用 Power Query 来解决问题。 Power Query 是 Excel 2010 Professional Plus 和所有更高版本的 Excel 中的内置函数。
步骤是:
- 使用
Data 选项卡下的From Table 函数将数据加载到Power Query 编辑器;
- 突出显示所有列,然后使用
Transform选项卡下的Unpivot Columns功能将表格转换为2列表格;
- 使用
Transform标签组Value列下的Group By功能,通过计算不同的行数,如下所述;
- 右键单击列标题右侧的 filer 框以通过
8 过滤列表,这将返回出现在所有 8 列中的值;
-
关闭并加载列(实际上是一个单列表)到新工作表(默认情况下)。
这里是后台电源查询M码,仅供参考。所有步骤都使用编辑器的内置功能,非常简单。
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"d0", Int64.Type}, {"d1", Int64.Type}, {"d2", Int64.Type}, {"d3", Int64.Type}, {"d4", Int64.Type}, {"d5", Int64.Type}, {"d6", Int64.Type}, {"d7", Int64.Type}}),
#"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Changed Type", {}, "Attribute", "Value"),
#"Grouped Rows" = Table.Group(#"Unpivoted Columns", {"Value"}, {{"Count", each Table.RowCount(Table.Distinct(_)), type number}}),
#"Filtered Rows" = Table.SelectRows(#"Grouped Rows", each ([Count] = 8)),
#"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"Count"})
in
#"Removed Columns"