抽空做了一下,代码如下:
Sub 生成随机数()
Dim lstrow%, lstcol%, arr(), brr(), maxnum%, k%, n%
版权归节即芝后士回答群网站或原作者音所有
lstrow = Range("a65536").End(3).Row
lstcol = Range("iv1").End(1).Column
arr = Range("a1").Offset(lstrow - 1, 0).Resize(1, lstcol)
For i = LBound(arr, 2) To UBound(arr, 2)
maxnum = maxnum + arr(1, i)
Next i
ReDim brr(1 To maxnum)
Randomize
For i = 1 To maxnum
有定第资光海导确许技约市府。
brr(i) = i
Next
For i = 1 To maxnum * 100
For k = 0 To maxnum - 1
n = Int(Rnd * (maxnum - k)) + k + 1
们出分过如机把料及即压带,叫众何值写置层满。
t = brr(n): brr(n) = brr(k + 1): brr(k + 1) = t
Next k
Next i
Range("a1").Offset(1, 0).Resize(lstrow - 2, lstcol).ClearContents
t = 0
m = 1
For i = 1 To UBound(arr, 2)
t = t + arr(1, i)
For j = m To t
ActiveSheet.Cells(brr(j) + 1, i) = 1
Next j
m = t + 1
Next i
End Sub
这个代码几乎实现了全自动,你只要在相应的行数内设置数值就可以了,比如最后一行相加是30,那么只要在第32行设置值就可以了,如果最后一行相加是53,那么只在第55行设置就可以了,列数不限。不过在其它单元格内不能有值。
做一辅助列,例如F列:
F2=RANDBETWEEN(1,5)
下拉至F25
芝士回答,版权必究南百己,未经许说可,不得转状载
A2=IF(COLUMN()=$F2,1,"")
右拉至E2
再一起下拉至25行
A26=SUM(A2:A25)
右拉至E26
excel产生随机数帮实现