|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
Option Explicit
Sub TEST2()
Dim ar, br, cr, i&, j&, k&, r&
Application.ScreenUpdating = False
ar = Range("C3:E4").Value
ReDim br(1 To WorksheetFunction.Permut(UBound(ar, 2), UBound(ar, 2)) * UBound(ar), 1 To UBound(ar, 2))
For i = 1 To UBound(ar)
cr = Application.Index(ar, i)
bSort1 cr, 1, UBound(cr)
cr = ArrPermut(cr, UBound(cr))
For k = 1 To UBound(cr)
r = r + 1
For j = 1 To UBound(cr, 2)
br(r, j) = cr(k, j)
Next j
Next k
Next i
[L2].Resize(UBound(br), UBound(br, 2)) = br
Application.ScreenUpdating = True
Beep
End Sub
Function ArrPermut(ar, n&)
Dim br&(), cr&(), vResult, i&, j&, k&, m&, iGroup&
m = UBound(ar)
iGroup = WorksheetFunction.Permut(m, n)
ReDim br(1 To n), cr(1 To m), vResult(1 To iGroup, 1 To n)
For j = 1 To n
br(j) = j: cr(j) = 1
vResult(1, j) = ar(j)
Next
For i = 2 To iGroup
For j = n To 1 Step -1
cr(br(j)) = 0
For k = br(j) + 1 To m
If cr(k) = 0 Then Exit For
Next
If k <= m Then cr(k) = 1: br(j) = k: Exit For
Next
For j = j + 1 To n
For k = 1 To m
If cr(k) = 0 Then Exit For
Next
cr(k) = 1: br(j) = k
Next
For j = 1 To n
vResult(i, j) = ar(br(j))
Next
Next
ArrPermut = vResult
End Function
Function bSort1(ar, iFirst&, iLast&, _
Optional isOrder As Boolean = True)
Dim i&, j&, vTemp
For i = iFirst To iLast - 1
For j = iFirst To iLast + iFirst - 1 - i
If ar(j) <> ar(j + 1) Then
If ar(j) < ar(j + 1) Xor isOrder Then
vTemp = ar(j)
ar(j) = ar(j + 1)
ar(j + 1) = vTemp
End If
End If
Next j
Next i
End Function
|
评分
-
2
查看全部评分
-
|