急急急, 如何用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以上版)