如何利用Excel解决排列组合问题(不得重复)

如何利用Excel解决排列组合问题(不得重复)公司购置新设备,设备科共有19人,只有3个名额可免费去国外培训,为了体现公平公证的原则,决定通过抽签的方式确定人员,,如何利用EXCEL来列出所有的组合,最终打印出抽签条呢?

这个组合有969种,需要准备969个条子。

如姓名在A列,从A2开始。

VBA代码:

Sub c()
    ScreenUpdating = False
    p = 1
    For i = 2 To 18
        For j = i + 1 To 19
            For k = j + 1 To 20
                Cells(p, 2) = Cells(i, 1) & "," & Cells(j, 1) & "," & Cells(k, 1)
                p = p + 1
            Next k
        Next j
    Next i
    ScreenUpdating = True
End Sub

我的机子用了46秒,cpu达100%

下面为你提供VBA程序,先执行宏1,

再执行宏2,每执行一次就会变。可反复执行。

'姓名在A列,从A2开始。结果在B列。
Sub 宏1()
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "=RAND()"
    Selection.AutoFill Destination:=Range("B2:B20"), Type:=xlFillDefault
    Cells(2, 3).Formula = "=a2"
    Cells(3, 3).Formula = "=a3"
    Cells(4, 3).Formula = "=a4"
    宏2
End Sub
Sub 宏2()
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("B2:B20") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range("A1:B20")
        .Apply
    End With
End Sub

温馨提示:答案为网友推荐,仅供参考
相似回答