查看: 28  |  回复: 0
  VBA代码 排列组合算法
楼主
发表于 2025年3月18日 15:00
'排列或者组合算法
Public ResultArr() As String, SorceArr, SumN As Currency    '结果数组,源数组,结果总数

Sub CombinAll(ByVal m As Byte, ByVal N As Byte, Optional types As Byte = 0)    'types=0为排列 types=1 为组合
    Dim num As Long, i As Integer, k As Integer, L%, a(), s() As String
    SumN = Application.Combin(m, N)    '计算组合数量
    If types = 0 Then SumN = SumN * Application.Fact(N)    '计算排列数量
    ReDim a(1 To N)    '临时数组
    ReDim ResultArr(1 To SumN, 0)    '结果数组
    k = 1
    Do
        a(k) = a(k) + 1
        If a(k) > m Then
            k = k - 1
        Else
            For i = 1 To k - 1
                If a(k) = a(i) Then Exit For
            Next
            If i = k Then
                If k = N Then
                    num = num + 1
                    For L = 1 To N
                        ResultArr(num, 0) = ResultArr(num, 0) & " " & SorceArr(a(L), 1)
                    Next
                End If
                If k < N Then k = k + 1: a(k) = a(k - 1) * types
            End If
        End If
    Loop Until k = 0
End Sub

Function 排列组合(rng As Range, N)
    SorceArr = rng.Value
    Call CombinAll(UBound(SorceArr), N)
    排列组合 = ResultArr
End Function


您需要登录后才可以回帖 登录 | 立即注册
【本版规则】请勿发表违反国家法律的内容,否则会被冻结账号和删贴。
用户名: 立即注册
密码:
2020-2025 MaNongKu.com