给定一个三元组列表,我想得到一个关系矩阵,如下所示。
1 A X
1 A Y
1 B X A B C
1 B Z 1 X,Y X,Z
2 A Z ==> 2 Z X Y
2 B X 3 Y Z
3 A Y
3 A Z
2 C Y
(如何)这可以在 Excel/VB/PowerBI 或类似中完成吗?
给定一个三元组列表,我想得到一个关系矩阵,如下所示。
1 A X
1 A Y
1 B X A B C
1 B Z 1 X,Y X,Z
2 A Z ==> 2 Z X Y
2 B X 3 Y Z
3 A Y
3 A Z
2 C Y
(如何)这可以在 Excel/VB/PowerBI 或类似中完成吗?
使用数组公式,您可以生成一个数组,该数组将保存第三列的值或空白,具体取决于是否应包含该值。然后,您可以使用 TEXTJOIN 加入它们。TEXTJOIN 是 Office 365 中的新功能;如果你没有它,你首先需要以这种方式将它定义为一个函数(取自MrExcel):
函数 TEXTJOIN(分隔符作为字符串,IgnoreBlanks 作为布尔值,ParamArray 文本()作为变体)作为字符串 暗淡项目作为变体,V 作为变体,Arr 作为变体 对于文本中的每个项目 如果 VarType(Item) > 8191 那么 对于项目中的每个 V 如果 Len(V) > 0 或 (Len(V) = 0 而不是 IgnoreBlanks) 那么 TEXTJOIN = TEXTJOIN & Delimiter & V 下一个 别的 TEXTJOIN = TEXTJOIN & 分隔符 & 项目 万一 下一个 TEXTJOIN = Mid(TEXTJOIN, Len(分隔符) + 1) 结束功能
现在回到你的问题,假设你的数据在 A1:C9 并且你想要的表在 F2:I5 (第 2 行和 F 列包含索引)你需要在 G3: 中使用这个公式{=TEXTJOIN(",";TRUE;IF($A$1:$A$9=$F3;IF($B$1:$B$9=G$2;$C$1:$C$9;"");""))}
:
如果您不熟悉数组公式,请注意您需要使用 CTRL+SHIFT+ENTER 输入。然后,您需要复制 G3 并将其粘贴到表格的其他单元格中(如果您尝试粘贴到包含您从中复制数组公式的单元格的范围内,则 Excel 会对此很挑剔,因此您可能必须这样做在几个糊状物中);并且公式将使用适当的索引,因为 $F3 和 G$2 是相对的。