EXCEL中有6列数 每列1至3个数 想在每列数中选一个组合成新的一行数 并显示所有组合,VBA如何实现?

这个问题长期以来严重困扰我的工作,手工操作的话,工作量太大了。跪请高手指点。
比如:
A列B列C列D列E列F列1行abcdef2行123583行mns
每列中选择一个,如果该列只有一个数字,则每次都选择这个数字,这样会有如下若干行数字:
A列B列C列D列E列F列5行abcdef6行1bcdef7行mbcdef8行a2cdef9行ancdef...........
等,新组合成的数字从第五行开始,向下依次显示出来。请问这个过程用VBA如何实现?
跪请高手帮忙,请各位大侠不吝赐教。小生将感恩戴德,千恩万谢。并把我的财富值全部供出。虽然不多,敬请笑纳!谢谢了!!!!!!
请高手可以把代码发到我的邮箱里:[email protected] 也可直接在下面回答。
再次万分感谢!!!
比如:

每列中选择一个,如果该列只有一个数字,则每次都选择这个数字,新组合成的数字从第五行开始,向下依次显示出来。这样会有如下若干行数字:

请问这个过程用VBA如何实现?跪请高手帮忙,请各位大侠不吝赐教。小生将感恩戴德,千恩万谢。

这个问题用函数公式可以解决。
我给你一个6列的通用公式,公式中的x1、x2、x3、x4、x5、x6分别为第1、2、3、4、5、6列的行数。如你举的例子,x1、x2、x3、x4、x5、x6分别对应为3、3、2、1、3、2
A5
=INDIRECT("A"&INT(MOD(ROW(A1)-1,X1*X2*X3*X4*x5*x6)/X2/X3/X4/x5/x6)+1)
B5
=INDIRECT("B"&INT(MOD(ROW(A1)-1,X2*X3*X4*x5*x6)/X3/X4/x5/x6)+1)
C5
=INDIRECT("C"&INT(MOD(ROW(A1)-1,X3*X4*x5*x6)/X4/x5/x6)+1)
D5
=INDIRECT("D"&INT(MOD(ROW(A1)-1,X4*x5*x6)/x5/x6)+1)
E5
=INDIRECT("E"&INT(MOD(ROW(A1)-1,x5*x6)/x6)+1)
F5
=INDIRECT("F"&MOD(ROW(A1)-1,X6)+1)

将以上公式下拉填充追问

jjchangyuan

    该方案我试了一下,貌似不行呀!但也非常谢谢你的支持。

追答

该方案绝对是正确的,因为你现在的数据是6列,组合较多,同时与你举例列出的组合顺序不一样,所以你认为不正确。其实最终结果与你逐个给出的是一样的,是正确的。你可以减少列数试一下,比如用3列,行数也尽量少一点,这样可以很快穷尽所有组合,方便验证公式是否正确。

追问

谢谢了,确实可以!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-07
是要把所有的组合都列出来呢 还是只列出每次随机生成的一些序列? 你是想要个通用的VBA代码 还是只针对你所给的excel写VBA代码?追问

全部列出,最好是通用代码,因为每一列的数据是随机的。

追答

Sub 列出所有组合()
Dim la%, lb%, lc%, le%, lf%, sum_row%
Dim ka%, kb%, kc%, ke%, kf%, i%

'求出各列的有效行数, 其中有一个字符的可以看出为D列
la = [a65000].End(xlUp).Row
lb = [b65000].End(xlUp).Row
lc = [c65000].End(xlUp).Row
le = [e65000].End(xlUp).Row
lf = [f65000].End(xlUp).Row

'所有组合数
sum_row = la * lb * lc * le * lf
MsgBox "总共有: " & sum_row & " 种组合"

i = 5
For ka = 1 To la
For kb = 1 To lb
For kc = 1 To lc
For ke = 1 To le
For kf = 1 To lf
Cells(i, "a") = Cells(ka, "a")
Cells(i, "b") = Cells(kb, "b")
Cells(i, "c") = Cells(kc, "c")
Cells(i, "D") = "d"
Cells(i, "e") = Cells(ke, "e")
Cells(i, "f") = Cells(kf, "f")
i = i + 1
Next kf
Next ke
Next kc
Next kb
Next ka
End Sub

可以用数组优化

本回答被提问者采纳
第2个回答  2013-06-07
用随机函数Rand
相似回答