2011-04-20 140 views
3

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

如果您知道以手动方式输入数字的快速方法,请帮助。

谢谢!

+0

您需要为此编写宏。可能是做搜索宏或试图实现它 – Senthil 2011-04-20 00:50:54

+0

如果有可能没有VBA代码,这将是很棒的。否则,我也对VBA解决方案感兴趣。谢谢! – AME 2011-04-20 00:57:19

+0

实际上,您可以使用工作表函数来完成这项工作,但在网站上描述时会感到很痛苦,并且会产生更大的痛苦。 :) – ktdrv 2011-04-20 01:26:31

回答

3

page的最后一篇文章中有VBA功能。将其复制到VBA模块中,然后在Excel中创建一个从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

1

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

其他人已经发布了非常好的基于VBA的解决方案,但这在工作表中并不难。下面是一个数组公式,将返回的三元(基-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键输入数组公式。然后通过$ B $ 729:$ G $ 729下拉。

最终导致细胞$ H $ 1,把公式:

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

并拖动下来到$ H $ 729你完成了!

+0

尽管“如果有可能没有VBA代码,这将是非常棒的。”这是VBA解决方案已被接受! – pnuts 2012-09-26 18:28:07