如何快速学习:[1]Swift编程语言,Swift,苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Ojective-C*共同运行于MacOS和iOS平台,用于搭建基于苹果平台的应用程......
2023-03-17 321 编程语言
曾经看到这样的一个问题,在Excel表格上面生成三个随机数且最大值、最小值与中间值偏差不超过10%。
乍看这个问题的时候,觉得可以使用RAND或RANDBETWEEN函数来处理,但细想起来,怎么能保证每次生成最大值和最小值与中间值的偏差不超过10%,且都需要人工判断,这样似乎是人为的去选择数值,比较麻烦。想来想去,还是觉得使用VBA程序来处理比较合适。
打开Excel表格后,按下键盘上面的【Alt F11】组合键打开VBA编辑器,也可以点击【开发工具】、【Visual Basic】打开VBA编辑器。
在VBA编辑器的菜单栏上面点击【插入】、【模块】插入代码模块,或者依次按下【Alt】、【I】、【M】键插入代码模块。
在模块的代码框里面输入以下程序代码:
Sub RnNumber()
Dim R1, R2, R3, Ra, Rm, Ri, Ba, Bi, i
On Error Resume Next '忽略运行过程中可能出现的错误
Set mysheet1 = ThisWorkbook.Worksheets("Sheet1") '定义工作表Sheet1
i = 0 'i初始化为0
mysheet1.Range("A1:A3") = "" '清空A1:A3单元格里面的内容
Do
i = i 1 '每执行一次循环,i递增1
R1 = Rnd() * 1000 '生成0-1000之间的随机数
R2 = Rnd() * 1000
R3 = Rnd() * 1000
Ra = Application.WorksheetFunction.Max(R1, R2, R3) '获取随机数里面的最大值
Rm = Application.WorksheetFunction.Median(R1, R2, R3) '获取随机数里面的中间值
Ri = Application.WorksheetFunction.Min(R1, R2, R3) '获取随机数里面的最小值
Ba = (Ra - Rm) = Rm * 0.1 '最大值与中间值之差,然后与中间值*10%比较
Bi = (Rm - Ri) = Rm * 0.1 '中间值与最小值之差,然后与中间值*10%比较
If Ba = True And Bi = True Then '如果最大值和最小值与中间值偏差不超过10%,则
mysheet1.Cells(1, 1) = R1 '把随机数R1写入A1单元格
mysheet1.Cells(2, 1) = R2
mysheet1.Cells(3, 1) = R3
Exit Do '退出Do循环
End If
If i1 > 200000 Then '如果循环次数超过200000次,则退出Do循环
Exit Do
End If
Loop
End Sub
输入完程序之后,点击VBA编辑器的工具栏里面的“运行”图标运行程序。
回到Excel表格界面,将会看到生成所需的随机数。
VBA程序解读:
(1)Rnd函数的随机数值范围是大于等于0且小于1,在此基础上添加一些参数就可以扩大随机的范围,以变成所需的随机数范围。
(2)在VBA程序里面,并不能直接使用Max、Median、Min来获取数值的最大值、中间值、最小值,此时只能借用Excel表格的函数功能Application.WorksheetFunction。
(3)在VBA程序里边乘以10%时,由于没法使用“%”,所以就乘以0.1,同时也可以减少VBA程序的运算量。
(4)使用Do循环时,应当尽量的避免死循环的出现(如:循环超过指定的次数则强制退出),以免Excel表格出现卡死、无响应的现象发生。
以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!
相关文章
如何快速学习:[1]Swift编程语言,Swift,苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Ojective-C*共同运行于MacOS和iOS平台,用于搭建基于苹果平台的应用程......
2023-03-17 321 编程语言
web图表开发工具FineReport:[11]连续分组,数据库表数据是按照时间先后录入的,查询的时候希望按照时间先后,某个字段连续相同的话就合并起来显示,这样的报表可以通过相邻连续分组来实现。......
2023-03-17 543 编程语言