生成n个随机数总计高达100 VBA

时间:2016-06-15 12:45:05

标签: excel vba excel-vba

您好我想在VBA中生成n个随机数,以便它们的总和必须为100,并且它们必须放置在第一行有7个数字然后第二行有7个数字,依此类推。我在互联网上尝试过这么多解决方案,但对我来说没什么用。所以任何人都可以建议解决方案或给我一个解决方案的链接。

提前致谢。

2 个答案:

答案 0 :(得分:3)

假设我们要将 10 数字加到 100 。在 A1 中输入:

=RANDBETWEEN(1,50)

并在 A2 中输入:

=IFERROR(RANDBETWEEN(1,100-SUM($A$1:A1)),0)

A2 复制到 A10

enter image description here

修改#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

enter image description here

答案 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
  • 您没有指定数字的存储位置或者是否为整数,我已在数组中以整数形式提供它们来回答问题。
  • 你需要考虑谁是随机数,如果你在网上看到你会知道这是一个难题
  • 我很荣幸在评论部分提出了1到10之间的额外要求。