求助 EXCEL的排列组合问题

2025-04-07 22:41:19
推荐回答(3个)
回答1:

你这13个数里有5个“3”,1个“4”,5个“5”,1个“6”,1个“7”。
从你的问题补充来看,5个重复的“3”和5个重复的“5”是有区别的,我们只能用它们在13个数中的前后位置来区分它们。
把这13个数存放在A1:A13单元格区域。即:A1=3,A2=4,A3=3,A4=3,A5=7,A6=3,A7=3,A8=5,A9=5,A10=5,A11=5,A12=6,A13=5。
虽然A1、A3、A4、A6、A7都是3,但它们不认为是相同的,用它们的行号1、3、4、6、7来区分。实际上这13个数都可以用它们的行号来区分。我编制了如下程序,在B列列出1、2...到13这13个数中取5个数的组合,在C列则列出B列对应行的单元格中的5个数为行号的A列的数。
例如:在B1中列出了1 2 3 4 5,在C1中则列出A1 A2 A3 A4 A5,即3 4 3 3 7。类似地,13个数中取10个数的数据分别列在D列和E列。VBA程序如下:
Private Sub CommandButton1_Click()
j = 1
For i1 = 1 To 9
For i2 = i1 + 1 To 10
For i3 = i2 + 1 To 11
For i4 = i3 + 1 To 12
For i5 = i4 + 1 To 13
Range("B" & j).Value = i1 & " " & i2 & " " & i3 & " " & i4 & " " & i5
Range("C" & j).Value = Range("A" & i1).Value & " " & Range("A" & i2).Value & " " & Range("A" & i3).Value & " " & Range("A" & i4).Value & " " & Range("A" & i5).Value
j = j + 1
Next i5
Next i4
Next i3
Next i2
Next i1
End Sub

Private Sub CommandButton2_Click()
j = 1
For i1 = 1 To 4
For i2 = i1 + 1 To 5
For i3 = i2 + 1 To 6
For i4 = i3 + 1 To 7
For i5 = i4 + 1 To 8
For i6 = i5 + 1 To 9
For i7 = i6 + 1 To 10
For i8 = i7 + 1 To 11
For i9 = i8 + 1 To 12
For i10 = i9 + 1 To 13
Range("D" & j).Value = i1 & " " & i2 & " " & i3 & " " & i4 & " " & i5 _
& " " & i6 & " " & i7 & " " & i8 & " " & i9 & " " & i10
Range("E" & j).Value = Range("A" & i1).Value & " " & Range("A" & i2).Value & " " & Range("A" & i3).Value & " " & Range("A" & i4).Value & " " & Range("A" & i5).Value _
& " " & Range("A" & i6).Value & " " & Range("A" & i7).Value & " " & Range("A" & i8).Value & " " & Range("A" & i9).Value & " " & Range("A" & i10).Value
j = j + 1
Next i10
Next i9
Next i8
Next i7
Next i6
Next i5
Next i4
Next i3
Next i2
Next i1
End Sub
这样算出的组合数分别是1287个和286个

回答2:

VBA 轻松搞定了

回答3:

http://zhidao.baidu.com/question/103737518.html?fr=im2
这个是我以前回答的 基本上一样~~
自己看一下~~不懂再HI我