急急急, 如何用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
随机打几个数 拉下去 另一列打上和数 然后用减法就可以了
用规划求解。
纵南愈酚: 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...