|
发表于 2021-4-15 23:17
|
显示全部楼层
本楼为最佳答案
Dim x, y, arr, v, r, m, sumx
Sub demo()
d1 = Range("u3:z" & [u3].End(xlDown).Row)
d2 = Range("ab3:ag" & [u3].End(xlDown).Row)
d3 = Range("ai3:an" & [u3].End(xlDown).Row)
d4 = Range("ap3:au" & [u3].End(xlDown).Row)
r = 3
For d = 1 To UBound(d1)
[e2:j2] = Application.Index(d1, d, 0)
[e9:j9] = Application.Index(d2, d, 0)
[d3:d8] = Application.Transpose(Application.Index(d3, d, 0))
[k3:k8] = Application.Transpose(Application.Index(d4, d, 0))
x = Range("D3:E8"): y = Range("E2:J3"): arr = Range("E3:J8")
For i = 1 To UBound(x)
x(i, 2) = Cells(i + 2, "k")
Next
For i = 1 To UBound(y, 2)
y(2, i) = Cells(9, i + 4)
Next
sumx = Application.Sum(x): ReDim v(1 To sumx)
Call com(1, 1, 1, 1)
Next
End Sub
Sub com(n As Integer, k As Integer, c As Integer, xx As Integer)
If n > UBound(x) Then
Cells(r, "N").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 = 3
yy = 1: If n > 3 Then yy = 2
For i = k To s + 3 - 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
祝順心,南無阿彌陀佛!
|
|