Dim x, y, arr, v, r, m, sumx
Sub demo()
x = Range("D3:E10"): y = Range("E2:N3"): arr = Range("E3:N10")
For i = 1 To UBound(x)
x(i, 2) = Cells(i + 2, "o")
Next
For i = 1 To UBound(y, 2)
y(2, i) = Cells(11, i + 4)
Next
sumx = Application.Sum(x): ReDim v(1 To sumx)
r = 3
Call com(1, 1, 1, 1)
End Sub
Sub com(n As Integer, k As Integer, c As Integer, xx As Integer)
If n > UBound(x) Then
Cells(r, "Q").Resize(1, sumx) = v
r = r + 1
Exit Sub
End If
If x(n, xx) = 0 Or c > x(n, xx) Then
If xx = 1 Then
Call com(n, 1, 1, 2)
Else
Call com(n + 1, 1, 1, 1)
End If
Exit Sub
End If
s = 0: If xx = 2 Then s = 5
yy = 1: If n > 4 Then yy = 2
For i = k To s + 5 - x(n, xx) + c
If y(yy, i) > 0 And arr(n, i) Then
y(yy, i) = y(yy, i) - 1
m = m + 1
v(m) = arr(n, i)
Call com(n, i + 1, c + 1, xx)
m = m - 1
y(yy, i) = y(yy, i) + 1
End If
Next
End Sub
祝順心,南無阿彌陀佛!