基于公式的方法
我的解决方案中E2单元格中的公式如下,由于是数组公式,需要按Ctrl+Shift+Enter让它发挥作用。
{=SUM(--ISNUMBER(MATCH(IF((Column_1&$D2=Column_1&Column_2),Column_1)&E$1,Column_1&Column_2,0)))}
请注意,我已将一些示例数据添加到您的原始数据集中,并且我已命名以下范围:
Column_1代表第一列A中的所有数据;
Column_2代表第二列B中的所有数据。
我的逻辑是
使用IF函数和=找出D列中给定的颜色对应的是什么Column_1 中的值?如果我们正在查看单元格D2 中的 Red,我的 IF 函数将返回以下内容
{"A";FALSE;FALSE;FALSE;FALSE;FALSE;"C";FALSE;FALSE;FALSE;"D";FALSE;FALSE;FALSE;FALSE};
使用 & 将上一步的范围与第 1 行中的查找值结合起来。如果我们将范围与单元格 @ 中的 Red 结合起来987654337@,我们会有
{"ARed";"FALSERed";"FALSERed";"FALSERed";"FALSERed";"FALSERed";"CRed";"FALSERed";"FALSERed";"FALSERed";"DRed";"FALSERed";"FALSERed";"FALSERed";"FALSERed"};
下一步是 MATCH 使用给定的组合 Column_1&Column_2 代表 ARed、ABlue 的范围>、AYellow、BBlue、BGreen 等。继续我的示例,结果将是
{1;#N/A;#N/A;#N/A;#N/A;#N/A;7;#N/A;#N/A;#N/A;11;#N/A;#N/A;#N/A;#N/A} 其中数值为ARed、CRed、DRed在范围内的位置给定的组合Column_1&Column_2。
最后一步使用 ISNUMBER 找出从上一步开始的范围内有多少个值是数字,应该返回
{TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;FALSE}
然后使用 -- 将所有 TRUE 结果SUM转换为数值1。
基于 Power Query 的方法
在我的解决方案 A1:B16 中使用相同的源数据,将其加载到 Power Query 编辑器,那么您应该具有以下内容:
请注意,我已按第 2 列排序表格,然后按第 1 列连续升序。这是一个可选步骤,只是为了帮助使以下步骤更易于理解。
下一步是通过匹配第 1 列,将表格与自己的表格合并:
展开新列以显示第 2 列:
高亮最后一列,使用Pivot Column函数变换表格,那么你应该有:
唯一的问题是颜色与源的位置不同。
如果保持颜色的原始顺序很重要,那么一种方法是
- 创建一个查找表,用索引列显示所需的颜色顺序;
-
在第一个查询中合并这个查找表pivot column,并匹配第三列中的颜色,展开并排序索引列和然后删除它;
- 执行透视列,然后再次合并查找表,再次展开、排序和删除索引列。
以下是幕后代码,仅供参考:
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Column 1", type text}, {"Column 2", type text}}),
#"Sorted Rows" = Table.Sort(#"Changed Type",{{"Column 2", Order.Ascending}, {"Column 1", Order.Ascending}}),
#"Merged Queries" = Table.NestedJoin(#"Sorted Rows", {"Column 1"}, #"Sorted Rows", {"Column 1"}, "Filtered Rows", JoinKind.LeftOuter),
#"Expanded Filtered Rows" = Table.ExpandTableColumn(#"Merged Queries", "Filtered Rows", {"Column 2"}, {"Filtered Rows.Column 2"}),
#"Pivoted Column" = Table.Pivot(#"Expanded Filtered Rows", List.Distinct(#"Expanded Filtered Rows"[#"Filtered Rows.Column 2"]), "Filtered Rows.Column 2", "Column 1", List.Count)
in
#"Pivoted Column"
如果您有任何问题,请告诉我。干杯:)