Excel中的排列

时间:2011-04-20 00:43:08

标签: excel excel-vba vba

我有一个包含6个空格的字符串,例如000000.每个空格可以容纳三个数字中的一个 - 0,1或2.我知道我可以使用Excel中的Permut函数获得总共120个排列,即= PERMUT(6,3)= 120.但我会实际上喜欢在单元格中进行每个单独的排列,例如000001,000010等。理想情况下,最终结果将是120行唯一的6位ID。

如果您知道更快的方法来完成此操作而无需手动输入数字,请提供帮助。

谢谢!

2 个答案:

答案 0 :(得分:3)

page的最后一篇文章中有VBA功能。将其复制到VBA模块,然后在Excel中,创建一个从0到n的整数列,其中n =您想要的ID数。在下一列中,使用第一列中的值作为第一个参数调用VBA函数,将3作为第二个参数。像

这样的东西
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

答案 1 :(得分:2)

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

其他人已经发布了完美的基于VBA的解决方案,但这在工作表中并不难。这是一个数组公式,它将返回一个数字的三元(base-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中,输入公式:

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

记住使用Ctrl-Shift-Enter将其作为数组公式输入。然后将其向下拖动到$ 727美元:$ 729美元。

最后在单元格$ H $ 1中,输入公式:

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

并将其拖低至$ 729美元。你做完了!