我在M列中有N个数字,这些数字是从1到100随机创建的。 randbetween (1;100)
。
我很卑鄙。现在有N个数字的平均值,我想从1到100随机创建,使其平均值等于平均值(反之)
[附件]
答案 0 :(得分:4)
SubSet
个随机数。 N
。 A
添加到您生成的随机数中。答案 1 :(得分:1)
我发现了按目标和创建随机数的代码。
Function RandTot(iTot As Long, iLo As Long, iHi As Long, _
Optional bVol As Boolean = False) As Variant
Dim nNum As Long
Dim i As Long
Dim ad() As Double
Dim iTry As Long
If bVol Then Application.Volatile
With Application.Caller
If .Rows.Count > 1 And .Columns.Count > 1 Then
RandTot = "Enter as row or column vector only!"
Exit Function
End If
nNum = .Count
End With
If iHi < iLo Or _
iTot < nNum * iLo Or _
iHi > iTot Then
RandTot = CVErr(xlErrValue)
Exit Function
End If
ReDim ad(1 To nNum)
Randomize
With WorksheetFunction
Do
iTry = iTry + 1
If iTry > 200 Then
RandTot = "Time-out"
Exit Function
End If
For i = 1 To nNum - 1
ad(i) = RandBetw(iLo, iHi)
Next i
ad(i) = iTot - .Sum(ad) + ad(i)
Loop Until .Min(ad) >= iLo And .Max(ad) <= iHi
End With
RandTot = ad
End Function
Function RandBetw(iLo, iHi) As Long
RandBetw = (Rnd * (iHi - iLo) + Rnd * (iHi - iLo) + Rnd * (iHi - iLo)) / 4 + iLo
End Function
首先,我将目标平均值乘以N,然后使用此代码,但有时会给我超时。