您好我想在VBA中生成n个随机数,以便它们的总和必须为100,并且它们必须放置在第一行有7个数字然后第二行有7个数字,依此类推。我在互联网上尝试过这么多解决方案,但对我来说没什么用。所以任何人都可以建议解决方案或给我一个解决方案的链接。
提前致谢。
答案 0 :(得分:3)
假设我们要将 10 数字加到 100 。在 A1 中输入:
=RANDBETWEEN(1,50)
并在 A2 中输入:
=IFERROR(RANDBETWEEN(1,100-SUM($A$1:A1)),0)
将 A2 复制到 A10 :
修改#1:强>
要使用宏,请尝试:
Sub randomality()
Dim ary(1 To 10) As Double, zum As Double
Dim i As Long
Randomize
zum = 0
For i = 1 To 10
ary(i) = Rnd
zum = zum + ary(i)
Next i
For i = 1 To 10
ary(i) = ary(i) / zum
Next i
With Application.WorksheetFunction
For i = 1 To 10
Cells(i, "D").Value = Round(100 * ary(i), 0)
Next i
Cells(10, "D").Value = 100 - .Sum(Range("D1:D9"))
End With
End Sub
这会将值设置为 D1 至 D10
答案 1 :(得分:0)
以下代码将执行您所要求的内容,但您需要检查更多问题: -
Public Sub Sample()
Dim AryNumbers() As Long
Dim LngCounter As Long
ReDim AryNumbers(0)
Randomize
Do Until LngCounter = 100
AryNumbers(UBound(AryNumbers, 1)) = Int(10 * Rnd + 1)
If (LngCounter + AryNumbers(UBound(AryNumbers, 1))) > 100 Then
AryNumbers(UBound(AryNumbers, 1)) = 100 - LngCounter
Else
LngCounter = LngCounter + AryNumbers(UBound(AryNumbers, 1))
ReDim Preserve AryNumbers(UBound(AryNumbers, 1) + 1)
End If
Loop
End Sub