如何在excel里从1到11任选5个数,然后已5个数一组进行排列组合所有的组合,请高手帮忙。

如题所述

第1个回答  2012-11-23
在一个空白工作表,按ALT+F11,点右键插入一个模块,输入如下内容,按F5。

Sub Macro1()
Dim Arr1(1 To 5), Arr2(1 To 120, 1 To 5)
Randomize

For i = 1 To 5
Arr1(i) = Int(Rnd * 11 + 1)
Next

a = 1
For i = 1 To 5
For j = 1 To 5
If j = i Then
Else
For k = 1 To 5
If k = i Or k = j Then
Else
For l = 1 To 5
If l = i Or l = k Or l = j Then
Else
For m = 1 To 5
If m = i Or m = j Or m = k Or m = l Then
Else
Arr2(a, 1) = Arr1(i)
Arr2(a, 2) = Arr1(j)
Arr2(a, 3) = Arr1(k)
Arr2(a, 4) = Arr1(l)
Arr2(a, 5) = Arr1(m)
a = a + 1
End If
Next
End If
Next
End If
Next
End If
Next
Next

Range(Cells(1, "A"), Cells(120, "E")) = Arr2

End Sub追问

[email protected] 多谢!

追答

已发送到你的邮箱了,你试一试吧,应该没有什么问题。

追问

从1到11选5个数,然后已5个数一组进行排列组合所有的组合,请高手帮忙。各组数不能有重复的数字。

追答

从1到11选5个数这个过程,允许出现重复的数吗?如果不允许,我们可以得到120组不同的组合。

如果允许,120个组合中会有很多重复,删去之后也可以得到一些结果。下面是不允许的。

Sub Macro1()
Dim Arr0, Arr1(1 To 5), Arr2(1 To 120, 1 To 5)
Randomize
Arr0 = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
For i = 1 To 5
b = Int(Rnd * UBound(Arr0, 1) - LBound(Arr0, 1) + 1)
c = Arr0(b)
Arr0 = Filter(Arr0, c, False)
Arr1(i) = c
Next

a = 1
For i = 1 To 5
For j = 1 To 5
If j = i Then
Else
For k = 1 To 5
If k = i Or k = j Then
Else
For l = 1 To 5
If l = i Or l = k Or l = j Then
Else
For m = 1 To 5
If m = i Or m = j Or m = k Or m = l Then
Else
Arr2(a, 1) = Arr1(i)
Arr2(a, 2) = Arr1(j)
Arr2(a, 3) = Arr1(k)
Arr2(a, 4) = Arr1(l)
Arr2(a, 5) = Arr1(m)
a = a + 1
End If
Next
End If
Next
End If
Next
End If
Next
Next

Range(Cells(1, "A"), Cells(120, "E")) = Arr2

End Sub

追问

从1到11选5个数这个过程,不允许出现重复的数.好像得到不止120组不同的组合。???
一定每5 个数字为一组,所有的的组合。
我想分别以1,2,3.4,5……数字开立头。
请发到我的邮箱,非常多谢你!!!

追答

5个数排列就是5*4*3*2*1=120
或者你的意思是:11选5的所有组合的所有排列?

本回答被网友采纳
第2个回答  2019-07-26
相似回答