excel随机函数出来的数相加等于一个想要的固定值 比如 产生20个随机数想加等于200而且每个数都不大于3
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/17 01:04:50
excel随机函数出来的数相加等于一个想要的固定值 比如 产生20个随机数想加等于200而且每个数都不大于3
最好用VBA 错了 相加总数是50
最好用VBA 错了 相加总数是50
Option Explicit
Function getRandom(total As Integer, max As Integer, num As Integer) As Boolean
'total是最后要得到的总和,max是最大不能超过的数,num是产生多少个随机数
Dim ranNum As Single '随机数
Dim leftNum As Single '剩余数
Dim conNumTotal As Single '确定的剩余数
Dim i As Integer
'判断条件是否满足
getRandom = True
If max * num < total Then
'根本就不可能满足条件,直接退出
getRandom = False
Exit Function
End If
conNumTotal = 0
For i = 1 To num - 1 Step 1
DoEvents
Randomize '随机化
'很显然地所有的ranNum都满足小于max的条件
ranNum = Rnd() * max '产生随机数
'判断当前数据的合理性
leftNum = total - conNumTotal - ranNum
If max * (num - i) < leftNum Then
'无法满足基本要求,退回序列
i = i - 1
Else
'满足要求,继续
conNumTotal = conNumTotal + ranNum
Debug.Print ranNum
End If
'自行处理产生的ranNum
Next i
'最后一个随机数
ranNum = total - conNumTotal
Debug.Print ranNum
debug.print "over"
'由于最后一个数
End Function
Sub a()
getRandom 200, 11, 20
End Sub
再问: 怎么产生不了数据
再答: '判断条件是否满足 getRandom = True If max * num < total Then '根本就不可能满足条件,直接退出 getRandom = False Exit Function End If 你分别传入200 3 20 这就的确是无法产生数据的,3*20=60,怎么也不可能实现要求 上面列出的代码就是判断这种非常无理的请求的…… 你用50的话就使用 Sub a() getRandom 50, 11, 20 End Sub ……你不会是说你不知道在什么地方看debug.print出来的数据吧? 如果这样的话你把第一个 Debug.Print ranNum 改成: thisworkbook.worksheets(1).range("A" & i).formular1c1=rannum 把最后一个 Debug.Print ranNum 改成: thisworkbook.worksheets(1).range("A" & i).formular1c1=rannum
再问: 为什改成50还是出不来数呢
再答: 立即窗口里面有没有数? 还是什么都没有打出来? If max * num < total Then '根本就不可能满足条件,直接退出 getRandom = False Exit Function End If 新加一句: If max * num < total Then '根本就不可能满足条件,直接退出 getRandom = False debug.print "not match exit function" //这句 Exit Function End If
Function getRandom(total As Integer, max As Integer, num As Integer) As Boolean
'total是最后要得到的总和,max是最大不能超过的数,num是产生多少个随机数
Dim ranNum As Single '随机数
Dim leftNum As Single '剩余数
Dim conNumTotal As Single '确定的剩余数
Dim i As Integer
'判断条件是否满足
getRandom = True
If max * num < total Then
'根本就不可能满足条件,直接退出
getRandom = False
Exit Function
End If
conNumTotal = 0
For i = 1 To num - 1 Step 1
DoEvents
Randomize '随机化
'很显然地所有的ranNum都满足小于max的条件
ranNum = Rnd() * max '产生随机数
'判断当前数据的合理性
leftNum = total - conNumTotal - ranNum
If max * (num - i) < leftNum Then
'无法满足基本要求,退回序列
i = i - 1
Else
'满足要求,继续
conNumTotal = conNumTotal + ranNum
Debug.Print ranNum
End If
'自行处理产生的ranNum
Next i
'最后一个随机数
ranNum = total - conNumTotal
Debug.Print ranNum
debug.print "over"
'由于最后一个数
End Function
Sub a()
getRandom 200, 11, 20
End Sub
再问: 怎么产生不了数据
再答: '判断条件是否满足 getRandom = True If max * num < total Then '根本就不可能满足条件,直接退出 getRandom = False Exit Function End If 你分别传入200 3 20 这就的确是无法产生数据的,3*20=60,怎么也不可能实现要求 上面列出的代码就是判断这种非常无理的请求的…… 你用50的话就使用 Sub a() getRandom 50, 11, 20 End Sub ……你不会是说你不知道在什么地方看debug.print出来的数据吧? 如果这样的话你把第一个 Debug.Print ranNum 改成: thisworkbook.worksheets(1).range("A" & i).formular1c1=rannum 把最后一个 Debug.Print ranNum 改成: thisworkbook.worksheets(1).range("A" & i).formular1c1=rannum
再问: 为什改成50还是出不来数呢
再答: 立即窗口里面有没有数? 还是什么都没有打出来? If max * num < total Then '根本就不可能满足条件,直接退出 getRandom = False Exit Function End If 新加一句: If max * num < total Then '根本就不可能满足条件,直接退出 getRandom = False debug.print "not match exit function" //这句 Exit Function End If
excel随机函数出来的数相加等于一个想要的固定值 比如 产生20个随机数想加等于200而且每个数都不大于3
excel 随机函数,随机产生几个函数,但几个函数的总和必须在一个固定数内,求公式.比如:生成500-800之间的数,函
设计一个程序,能随机产生3个3位的正整数,且要求每个数的三位数字之和等于20,并输出结果
如何用excel找出几个数相加等于固定值
EXCEL函数问题,想知道一行数字中哪几个数字相加等于固定的一个数,相关函数是怎样的
用excel求随机数:比如和为18 产生4个随机数 要求大于等于1且小于等于5 四个数之和为18.
excel随机数函数如何在-1到1之间取数,并且相加等于0
有一个数想要在一大推的excel表数据中寻找两个数相加等于它,有何便捷的方法快速找出这,两个数~~~
vb编程 输入一个数,随即产生一些随机数,要求产生的随机数的平均值等于输入的数
EXCEL中如何生成几个随机数怯生成熟之和不大于一固定数
excel随机数中小于0.5和正负200的数是如何产生的?
EXCEL中如何使3个数和等于另一个固定值数,但这3个数是随机数