有没有办法列出一列单元格中的所有值,这些单元格包含具有共同点的逗号分隔值 - 例如
例如,我想将用户 1 从一个事物移动到另一个事物 - 为此,我必须移动他们所属的用户和组以及属于同一组的任何其他用户。
我还必须确定这些用户所属的其他组等等。
因此,User1 是 Group1 的成员,User2 也是;User2 是 Group2 的成员,User9 也是;但 user9 也是 group8 的成员。
我需要识别属于组 1、2、8 的所有用户,因为他们彼此之间有依赖关系。
因此,基于此,我想查看由于移动每个用户而可能需要识别的所有组号 - 如果这有意义的话?
如下例所示:
用户 | 团体号码 | 答案 |
---|---|---|
用户1 | 1 | 1; 2 ; 3 ; 4 ; 7; 8 |
用户2 | 1; 2 | 1; 2 ; 3 ; 4 ; 7; 8 |
用户3 | 2 | 1; 2 ; 3 ; 4 ; 7; 8 |
用户4 | 3 ; 4 | 1; 2 ; 3 ; 4 ; 7; 8 |
用户5 | 5 | 5; 6; 10; 11 |
用户6 | 6 | 5; 6; 10; 11 |
用户7 | 7; 2 | 1; 2 ; 3 ; 4 ; 7; 8 |
用户8 | 7; 4 | 1; 2 ; 3 ; 4 ; 7; 8 |
用户9 | 8; 2 | 1; 2 ; 3 ; 4 ; 7; 8 |
用户10 | 9 | 9 |
用户11 | 10; 6; 5 | 5; 6; 10; 11 |
用户12 | 11; 5 | 5; 6; 10; 11 |
很难找到一个公式或合理的方法来做到这一点
这个清单也是很长的清单......
提前感谢任何指示
答案1
Excel 并非设计用于处理集合,而是用于处理序列,但这里也没有内部函数。
在新版 Excel 中,借助函数LAMBDA
,您可以定义自己的函数,在这种情况下,您可以使用此类辅助函数。
我们将定义 3 个函数:
union
调用创建集合总和(保留元素的顺序)的函数——它基于合并文本和删除重复项的原理工作。=LAMBDA(a,b,TEXTJOIN(" ; ",,UNIQUE(--TEXTSPLIT(a&";"&b,";"),TRUE)))
如果两个字符串没有共同的元素,则调用一个函数
sepd
返回布尔值- 该函数将简单连接起来并进行比较。TRUE
=LAMBDA(a,b,TEXTJOIN(" ; ",,a,b) = union(a,b))
调用一个函数
lsort
来对列表的元素进行排序。=LAMBDA(a,TEXTJOIN(" ; ", , IFERROR(SORT(--TEXTSPLIT(a, ";"), , , TRUE), "")))
用于查找依赖项的公式会查看组号列表并将所有相关项附加到序列中。由于数据的顺序是随机的,因此您应该多次查看列表,直到获得一致的结果。
我使用了以下公式(在 E59 中):
=REDUCE(B59, $B$59:$B$70, LAMBDA(a, b, IF(sepd(a, b), a, union(a, b))