Excel中的排列

我有一个有6个空格的string,例如000000.每个空格可以保存三个数字中的一个 – 0,1或2.我知道我可以使用Excel中的Permut函数总共获得120个排列,即= PERMUT 6,3)= 120.但是我实际上希望在单元格中有每个单独的排列,例如000001,000010等等。理想情况下,最终的结果是120行唯一的6位ID。

请帮助,如果你知道一个更快的方式来完成这个没有手动input数字。

谢谢!

在这个页面的最后一篇文章中有一个VBA函数。 将其复制到VBA模块中,然后在Excel中创build一个从0到n的整数列,其中n =所需ID的数量。 在下一列中,将第一列的值作为第一个参数,将第三个参数作为第二个参数,调用VBA函数。 就像是

Column A Column b 0 =baseconv(A1, 3) 1 =baseconv(A2, 3) 2 =baseconv(A3, 3) ... etc. 

您的ID实际上只是使用基本3计数系统的增量值。 您可以格式化输出以获得具有自定义格式“000000”的前导零。

顺便说一句,有6个位置和3个可用的值,你可以得到3 ^ 6或729个唯一的ID

首先,我不认为你在这里正确使用PERMUTPERMUT(6,3)给你的是从一组六件事物中挑选三件事情的总数。 所以结果是120,因为你可能有6 * 5 * 4可能的排列。 在你的情况下,你有3 ^ 6 = 729个可能的string,因为每个位置有三个可能的字符之一。

其他人已经发布了完美的基于VBA的解决scheme,但这在工作表中并不难。 这里是一个数组公式,它将返回一个数字的三元(基-3)表示的最后六位数字的数组:

 =FLOOR(MOD(<the number>,3^({5,4,3,2,1,0}+1))/(3^{5,4,3,2,1,0}),1) 

(正如WarrenG所指出的那样,获得一堆3位数字是解决问题的方法之一。)

您可以在某个列中拖出数字0到728,例如$ A $ 1:$ A $ 729。 然后在$ B $ 1:$ G $ 1中,input公式:

 =FLOOR(MOD(A1,3^({5,4,3,2,1,0}+1))/(3^{5,4,3,2,1,0}),1) 

记住用Ctrl-Shift-Enter作为数组公式input。 然后通过$ B $ 729:$ G $ 729下拉。

最后在单元$ H $ 1中,把公式:

 =CONCATENATE(B1,C1,D1,E1,F1,G1) 

并通过$ H $ 729下拉。 你完成了!