|
Option Explicit
Sub TEST2()
Dim ar, br, cr, dr, er, i&, j&, iMax&
Application.ScreenUpdating = False
ar = Range("P1", Cells(Rows.Count, "Q").End(xlUp)).Value
ReDim br(1 To UBound(ar), 1)
For i = 1 To UBound(ar)
cr = Split(ar(i, 1), ",")
dr = RndNumCount(0, UBound(cr), CLng(ar(i, 2)))
ReDim er(1 To ar(i, 2))
For j = 1 To UBound(dr)
er(j) = cr(dr(j))
Next j
br(i, 0) = Join(er, ",")
If ar(i, 2) > iMax Then iMax = ar(i, 2)
Next i
dr = RndNumCount(0, iMax, UBound(br))
For i = 1 To UBound(dr)
br(i, 1) = dr(i)
Next i
[R1].Resize(UBound(br), 2) = br
Application.ScreenUpdating = True
Beep
End Sub
Function RndNumCount(MinNum&, MaxNum&, CountNum&)
Dim i&, n&, ar, xNum&, temp&
Application.Volatile
If MaxNum < MinNum Then temp = MaxNum: MaxNum = MinNum: MinNum = temp
If CountNum > MaxNum - MinNum + 1 Then RndNumCount = "无解": Exit Function
ReDim ar(1 To CountNum): n = 1
Randomize
Do While n <= CountNum
xNum = Int((MaxNum - MinNum + 1) * Rnd + MinNum)
ar(n) = xNum
For i = 1 To n
If ar(i) = xNum Then Exit For
Next i
If i = n Then n = n + 1
Loop
RndNumCount = ar
End Function
|
评分
-
2
查看全部评分
-
|