我有这个问题,我有多个值列表,并且我需要获得所有可能的排列,所以基本上我有
List A = 1,2,3,4,5
List B = 10,20,30,40,50
List C = 5,4,5,2,1
List D = a,b,c,d,e
它们每个都位于彼此相邻的列中,因此第一行应该有 1,10,5,1,后面是 2,10,5,1,依此类推。有没有办法在不使用宏的情况下获取此列表?
任何帮助将不胜感激,谢谢!
我有三列,每列都有不同种类的主数据,如下所示:
现在,我想拥有这三个单元格的所有可能组合-
aa kk jj
aa kk ff
aa ll jj
aa ll ff
aa mm jj
...
Run Code Online (Sandbox Code Playgroud)
可以用公式来完成。我发现一个包含2列的公式,但是我无法正确地将其扩展到3列
两列公式:
=IF(ROW()-ROW($G$1)+1>COUNTA($A$2:$A$15)*COUNTA($B$2:$B$4),"",
INDEX($A$2:$A$15,INT((ROW()-ROW($G$1))/COUNTA($B$2:$B$4)+1))&
INDEX($B$2:$B$4,MOD(ROW()-ROW($G$1),COUNTA($B$2:$B$4))+1))
Run Code Online (Sandbox Code Playgroud)
其中G1是放置结果值的单元格
是否可以在不使用 VBA 且不使用任何“帮助”表或行/列的情况下在 Excel 中生成排列表?
对于 N 列,将有 N! 行。
例如,N=3 的表将如下所示:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
Run Code Online (Sandbox Code Playgroud) 我做了一些挖掘,但找不到类似的问题。使用 VBA 循环这很容易,但实际上只是由于兼容性/在线共享而尝试使用单元格公式获得相同的结果。
我有两列,正在尝试连接两列的所有可能值。
Col1 Col2
A 1
B 2
C
...etc...
Run Code Online (Sandbox Code Playgroud)
所以结果是:
A1
A2
B1
B2
C1
C2
...etc...
Run Code Online (Sandbox Code Playgroud)
理想的情况是寻找一种溢出的解决方案,这样我就不必拖拉公式,而是接受任何可以获得所需结果的建议。
蒂亚!
下面是 5 列 - 第 6 列包含所需的结果:5 列中的每个可能排列的名称。
两行只有两列有值 - 因此第 6 列中只有两种排列(由“;”分隔)。
一行有 4 个值,因此有 24 种排列。
抱歉,我无法弄清楚如何将 Excel 中的表格粘贴到 Stack 中,而无需全部重写。
真实数据集中的行可以有 1 个值、5 个值或介于两者之间的任何值。
这里的答案似乎只适用于二维数组 - 该数组是一维的。我想不出任何明显的方法来使其成为 2d 以便这些解决方案发挥作用,这似乎也不是一种有效的方法。上述答案中的一个公式如下(我查看了所有这些公式,但无法弄清楚如何使它们适应我的需求):
=LET(A,A1:C3,B,ROWS(A),C,COLUMNS(A),D,B^C,E,UNIQUE(MAKEARRAY(D,C,LAMBDA(rw,cl,INDEX(IF(A="","",A),MOD(CEILING(rw/(D/(B^cl)),1)-1,B)+1,cl)))),FILTER(E,MMULT(--(E<>""),SEQUENCE(C,,,0))=C))
Run Code Online (Sandbox Code Playgroud)
我在 google 上搜索到的大多数解决方案似乎也无法在 1 行 5 列的简单数组上工作(或者我无法让它们工作)。
我尝试从头开始做,最终生成了一个仅包含数字 1-5 并且没有重复的数字列表 -
=LET(firstperm,VALUE(CONCAT(SEQUENCE(1,COLUMNS(Tablestu[@[First Name]:[Preferred Last Name]])))),lastperm,VALUE(CONCAT(SORT(SEQUENCE(1,COLUMNS(Tablestu[@[First Name]:[Preferred Last Name]])),,-1,TRUE))),diff,(lastperm-firstperm)+1,list,SEQUENCE(diff,1,firstperm),wanted,(IF((ISNUMBER(SEARCH("1",list))*ISNUMBER(SEARCH("2",list))*ISNUMBER(SEARCH("3",list))*ISNUMBER(SEARCH("4",list))*ISNUMBER(SEARCH("5",list))),list,"")),FILTER(wanted,wanted<>"",""))
Run Code Online (Sandbox Code Playgroud)
我想我可以以某种方式拆分这 5 位数字,并使用 INDEX 公式按该顺序返回单词。即 31452 将返回第三个单词,然后是第一个,然后是第四个,依此类推......但我仍然需要一百万次键盘头粉碎才能将其变成我需要的东西,而且它的效率将是愚蠢的低效当我到达那里时。
链接的答案似乎是正确的事情 - 我正在使用 Excel 365,我需要一个使用公式而不是 VBA 或 power query 的解决方案。
LAMDA 和 LET 都很好。