'abs(30*6/2-100)=10 ,纯随机有解的可能性还是非常大的
'否则需要做些权重处理,不然这方法会无解的
Option Explicit
Sub abc()
Dim i, n, sum, t
sum = 100
Randomize
Do
n = 0
ReDim a(1 To 30) As Long
For i = 1 To UBound(a) - 1
t = Int(Rnd * 7): a(i) = t
n = n + t
If sum - n >= 0 And sum - n <= 6 Then
a(i + 1) = sum - n: Exit For
End If
Next
DoEvents
Loop Until i < UBound(a)
For i = 1 To UBound(a)
n = Int(Rnd * UBound(a)) + 1
t = a(i): a(i) = a(n): a(n) = t
Next
[a1].Resize(, UBound(a)) = a
End Sub