急急急, 如何用Excel表格把一个固定值拆成若干个随机数,随机数的和等于固定值

作者&投稿:箕怡 (若有异议请与网页底部的电邮联系)
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以上版)

使用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



随机打几个数 拉下去 另一列打上和数 然后用减法就可以了

用规划求解。


美溪区19521372604: excel怎么用函数把一个单元格内容拆分 -
纵南愈酚: Excel中可以根据需要利用right/left/mid等函数将单元格内容拆分. 软件版本:Office2013 举例说明如下: 1.将A列中的文字和数字拆分到两列中: 2.B1输入公式如下: 3.C1输入公式如下: 4.选择B1C1,下拉填充得到结果如下:

美溪区19521372604: 在EXCEl中如何把1变成01的格式 -
纵南愈酚: 点右键→设置单元格格式→数字→自定义→在“类型”下面的空格里输入 00

美溪区19521372604: EXCEL急急急!一列中有数字和文字,我如何把列里面的数字都加1,文字不变? -
纵南愈酚: 找一空白单元格输入1,复制,选定你加数字+1的列区域(不要选整列,有多少数据选多少行),右键,选择性粘贴,运算里点加,确定.

美溪区19521372604: 急急急!!excel 怎样把一列中数据相同的行筛选出来并自动删除???!!! -
纵南愈酚: 选中这四列,数据-筛选-高级筛选-选择不重复的数据

美溪区19521372604: excel表格怎样快速复制 急急急 !! -
纵南愈酚: 选中要输入10的所有单元格,在编辑栏输入:10 然后摁CTRL+回车就可以了.

美溪区19521372604: 怎样在excel中把一行转为一列 -
纵南愈酚: 选中当前列或多列,复制,然后在空白位置 右键--选择性粘贴,转置.

美溪区19521372604: 急急急~~~EXCEL中,怎么把一个值的多个相应值提取出来~~??? -
纵南愈酚: 第二个问题: =MAX(IF(A2:A9="大",C2:C9,0)) 这是数组公式,在输完公式后,同时按下ctrl+shift+enter;第一个问题: 方法1: 在D1单元格输入 大 D2输入 =IF(A2=$D$1,B2,""),按住向下填充至D9,在D10输入公式=CONCATENATE...

美溪区19521372604: excel怎么把两行变成一行,如图,求高手急救,急急急! -
纵南愈酚: 选定数据区域,点合并单元格按钮取消合并单元格.选定A列(可选任意一列有空格的),Ctrl+G定位,定位条件:空值,确定.右击选中的任一单元格,删除,整行.

美溪区19521372604: excel表格把数字从1到后,挨个排列.怎么用最简单的方法. -
纵南愈酚: 先在表格中输入1,2或者3,4必须是连续的数字,在左键选中,鼠标放至变“+”后点住左键往下拉就行了.

美溪区19521372604: Excel 表格中,把单一的全部列出来,重复的取一个,怎么用公式.如图 -
纵南愈酚: 一,用高级筛选(这里不再叙述)二,用公式假设数据在A列,在B1输入:=index(a:a,small(if(match(a$1:a$100,a$1:a$100,)=row($1:$100),row($1:$100),4^8...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网