急急急, 如何用Excel表格把一个固定值拆成若干个随机数,随机数的和等于固定值 怎样通过excel生成多个指定范围内随机数且和为固定值?
使用vba来求解。假设你按如下位置输入各参数,则D列会列出结果:
代码:
Sub 对固定值按指定区间拆分指定个数()
Dim sGoal As Single, sMin As Single, sMax As Single, sResult As Single
Dim sMax1 As Single, sMin1 As Single
Dim sRnd As Single, sMean As Single
Dim iCount As Integer, i As Integer, j As Integer
Dim arr() As Single
Dim boo As Boolean
sGoal = ActiveSheet.Range("B1").Value
sMin = ActiveSheet.Range("B2").Value
sMax = ActiveSheet.Range("B3").Value
iCount = ActiveSheet.Range("B4").Value
If sMin = 0 Or sMax = 0 Then '最大值最小值任一为0或空,都视为不设区间
sMin = 0
sMax = sGoal
Else
If sMin = sMax Then
MsgBox "最大最小值不能相等!"
Exit Sub
End If
If sMin > sMax Then '使smax大于smin
sResult = sMin
sMin = sMax
sMax = sResult
End If
End If
If iCount < 1 Then
MsgBox "拆分个数不合理!"
Exit Sub
End If
If sMin * iCount > sGoal Or sMax * iCount < sGoal Then
MsgBox "最小值or最大值设置不合理!"
Exit Sub
End If
Range("D1").EntireColumn.ClearContents
sMean = sGoal / iCount
sMax1 = sMax
sMin1 = sMin
For i = 1 To iCount
ReDim Preserve arr(1 To i)
Randomize i
sRnd = Rnd
sResult = (sMax1 - sMin1) * sRnd + sMin1 '每一步结果
arr(i) = sResult
If sResult > sMean Then
sMax1 = sResult
sMin1 = sMin
Else
sMin1 = sResult
sMax1 = sMax
End If
Next i
For i = LBound(arr) To UBound(arr)
Range("D" & i).Value = arr(i) ' * sGoal
Next i
'最后修正数字,使得总计正好等于固定值
Do
boo = True
sResult = Application.WorksheetFunction.Sum(Range("D1:D" & iCount))
sMean = (sResult - sGoal) / iCount
If Abs(sMean) < 0.000001 Then
Exit Do
End If
For i = 1 To iCount
If Range("D" & i) - sMean < sMin Or Range("D" & i) - sMean > sMax Then
boo = False
Else
Range("D" & i) = Range("D" & i) - sMean
End If
Next i
Loop While Not boo
MsgBox "over"
End Sub
随机打几个数 拉下去 另一列打上和数 然后用减法就可以了
用规划求解。
excel表格中如何使随机数相加成一个固定值?~
下面以“要求生成25个随机数,使它们总和为2600”为例,详细展示 Excel 表格中如何使随机数相加成一个固定值的操作步骤。
1、首先得确定第一个随机数A1的值(注:A1的值=总和÷个数),本例中A1=2600÷25=104,但实际操作过程中往往取较大的数,并且取好一点的数值才会满足要求,本例中A1取值108;
2、在A2中输入:=INT($A$1*(0.9+0.1*RAND()));
3、把A2单元格右下角下拉至A24;【即将A2的公式复制到倒数第二个单元格】
4、在最后一个单元格输入:=总和-SUM(A1:A??)【注:“A??”表示倒数第二个单元格】,在本例中A25:=2600-SUM(A1:A24);
5、如产生的结果不满意,按快捷键“F9”刷新数据,直到满意数据为止。
最后说明一下所用到相关函数的功能,本例中用到的函数有--INT()、RAND()、SUM():
①INT():取整用的,有的时候数据要求结果是整数,就需要用到。当然,有的时候要求保留2位小数之类的,那么就需要结合ROUND()函数一起使用;
②RAND() :rand()函数可生成 0-1 之间(不包含 1)的随机小数,rand()变化成其他形式会有更多的随机数产生;【注:本例中用“0.9+0.1*RAND()”形式,意指要产生0.90~0.99之间的数,这样控制是为了能让最后结果差不多】
③SUM():求总和公式。
=randbetween(10,20)
表示随机生成10到20之间的整数(适用于Excel2007以上版)