宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

文章目录[隐藏]

  • 第五节随机数在实际场景中的应用
  • 1工作表中MyRandomA自定义函数的使用
  • 2使用随机数完成公司年会抽奖流程。

Excel随机数(excel生成的随机数)2021-07-23 18: 41 VBA语言专业教育

【分享成果,用正能量快乐】风雨让你了解生活,你可以通过所有的痛苦去理解生活。人生苦短,没有后悔的时候。如果不是结束,请保持微笑。你在一个人面前可能毫无价值,但在另一个人面前却是无价的。记住自己的价值。这就是人们改变生活的原因。

《VBA信息获取与处理》课程是我推出的第六门课程,第一版已经修改过了。本教程定位于最高层次,是学完初级和中级之后的教程。本教程内容有:跨应用信息获取、随机信息利用、电子邮件发送、VBA互联网数据抓取、VBA延时操作、剪贴板应用、Split功能扩展、工作表信息与其他应用交互、FSO对象利用、工作表和文件夹信息获取、图形信息获取、工作表信息功能定制等。该程序通过了32位和64位OFFICE系统测试。它非常抽象,更有研究价值。

本教程由两卷84节课组成。今天的内容是第二个主题“随机数在EXCEL工作表和VBA中的应用”的第五讲:随机数模拟抽奖过程。

第五节随机数在实际场景中的应用

先说说这个话题的具体应用。随机数虽然是很抽象的数字,但是我在这个题目的开头已经讲过随机数的概念,就是不能根据之前的数据来推断后续的数据。正是有了这个原则,我们才能在一些实际场景中使用它们。这里,我们主要模拟一个抽奖场景。在此之前,我们还想谈谈如何使用我们在工作表中建立的MyRandomA函数。

1工作表中MyRandomA自定义函数的使用

在对代码的解释中,我们知道MyRandomA函数有四个参数,分别是生成随机数的最小和最大个数、需要生成的随机数个数、数组的下标(这个值不是必须的)。然后让我们看看如何在工作表中使用这个函数。让我们首先看看我们的工作表要求:

要求生成10个随机数,最大值为10,最小值为40。

(1)我们首先要选择10个水平单元格(即生成随机数的个数):

②在编辑栏输入公式= MyRandomA(B2、B3、B4),然后同时按下数组的控制键CTRL+SHIFT+ENTER,就会生成我们需要的10个随机数。为什么要同时按上面提到的三个键?感兴趣的朋友可以参考我的教程VBA数组和字典解。

让我们看看生成的随机数截图:

如果垂直生成十个随机数呢?它可以通过公式获得:=转置(MyRandomA(B2,B3,B4))。为什么要用这个公式?另外,请参考我的VBA阵列和字典解决方案教程:

2使用随机数完成公司年会抽奖流程。

许多公司使用年度彩票的传统。为了达到公平公正的原则,我们也可以用随机数来操作,并做一个简单的小程序来实现抽奖过程。这个程序也在这个题目的程序文件里,你可以使用。这里只能解释随机函数部分,其他过程可以自己理解。比如上面的抽奖界面,先抽10个三等奖,点击准备后,抽奖所有参与者的名单会在灰色区域滚动。点击抽奖时,本轮抽奖的10位参与者名单将出现在“立即公布中奖名单”一栏;在下一次抽奖中,这轮人将下移。

这个抽奖程序可以实现多轮抽奖,每轮抽奖人数可以设置,中奖名单可以即时公布等。非常方便,可以作为大小年会的娱乐应用。

当然,VBA代码也是值得学习的,很多功能流程都运用得很巧妙。由此可见,VBA也是一位适逢其时的娱乐大师。

开奖前,我们需要提前录入参赛人员名单:

每轮开始前,利用总人员名单与已中奖人员名单的差额集,找出该轮中彩票参与人的中奖号码。然后使用前面解释的函数MyRandomA来完成我们的抽奖过程。请看下面的代码:

“我的nze()”开始抽奖。

表(“表5”)。挑选

TT =假

设置mydic = CreateObject(“脚本.字典”)

找出两个列表的不同集合。

计数=单元格(行。数一数,“o”)。结束(xlUp)。排

计数=单元格(行。计数,“J”)。结束(xlUp)。排

ARRA =范围(“P2:P”& P count)

ARRB =范围(“J1:J”& Jcount)

Arr = ARRE(ARRA、ARRB)

范围(“C2”)= UBound(Arr)

把名字载入词典。

对于i = 1至UBound(Arr)

mydic(i) = Arr(i)

然后

你想要哪一轮抽奖?

RRR =细胞(3,“h”)。价值

如果RRR =“那么

k = 1

其他

k = Mid(RRR,2,伦(RRR) – 2) + 1

如果…就会结束

预先填写完成抽奖的数组。

孔=假

如果范围(“JBOY3乐队”)”“那么ARRC =范围(“H3:J”& Cells(2,“J”)。结束(xlDown)。行):孔=真

开始抽签。

UU = MyRandomA(1,UBound(Arr),Range(“B2”))

回填数据

对于i = 1至范围(“b2”)

单元格(jCount+i,“h”)=“第一个”& k & round

单元格(jCount + i,“I”)=范围(“a2”)

细胞(jCount + i,” j”) = mydic(UU(i))

然后

范围(“A6”)= mydic(UU(I-1))

设置mydic =无

新获奖名单

ARRD =范围(“H”& jCount+1 &”:J”&单元格(2,“J”)。结束(xlDown)。行)

重置获奖名单

范围(“H3:J”&细胞(2,“J”)。结束(xlDown)。行)。ClearContents

j = 3

对于i = UBound(ARRD)到1步骤-1

Cells(j,” h”) = ARRD(i,1)

Cells(j,” i”) = ARRD(i,2)

Cells(j,” j”) = ARRD(i,3)

j = j + 1

然后

如果孔=真,那么

对于i = 1至UBound(ARRC)

Cells(j,” h”) = ARRC(i,1)

Cells(j,” i”) = ARRC(i,2)

Cells(j,” j”) = ARRC(i,3)

j = j + 1

然后

如果…就会结束

MsgBox“您已经完成了“&k&”抽奖!”

末端接头

代码截图:

说明:以上代码完成任意一轮的抽奖过程。

① UU = Myrandoma (1,ubound (arr),Range(“B2”))是整个代码的核心部分,其中1是随机数的最小个数,UBound(Arr)是随机数的最大个数,Range(“B2”)是随机数的个数。UU是返回的获胜者的序列号。

②’回填数据

对于i = 1至范围(“b2”)

单元格(jCount+i,“h”)=“第一个”& k & round

单元格(jCount + i,“I”)=范围(“a2”)

细胞(jCount + i,” j”) = mydic(UU(i))

然后

范围(“A6”)= mydic(UU(I-1))

设置mydic =无

新获奖名单

ARRD =范围(“H”& jCount+1 &”:J”&单元格(2,“J”)。结束(xlDown)。行)

重置获奖名单

范围(“H3:J”&细胞(2,“J”)。结束(xlDown)。行)。ClearContents

j = 3

对于i = UBound(ARRD)到1步骤-1

Cells(j,” h”) = ARRD(i,1)

Cells(j,” i”) = ARRD(i,2)

Cells(j,” j”) = ARRD(i,3)

j = j + 1

然后

如果孔=真,那么

对于i = 1至UBound(ARRC)

Cells(j,” h”) = ARRC(i,1)

Cells(j,” i”) = ARRC(i,2)

Cells(j,” j”) = ARRC(i,3)

j = j + 1

然后

如果…就会结束

以上过程就是对应该生成的数据进行处理。首先,回填新生成的人员数据。这里使用字典的键值。然后,将新生成的数据和已经生成的数据分别放入两个数组中。之后,数据被清除空并再次回填。首先填写新生成的获奖者,然后填写获奖者名单。

最后,让我们看一下实际的截图:

它仍然非常漂亮。在实际动作中,人的滚动将是动态的,非常直观。好的,具体代码请参考本主题的程序文件。

这一节知识点回顾:如何在工作表中使用VBA定义的函数?彩票中的随机函数是如何使用的?节目一开始,为什么要把人的名单放在字典里,这样做有什么好处?

本节的详细代码是“参考002工作表。XLSM “

我20多年的VBA实践经验集中在以下教程中。教程的学习顺序如下:

① 7→1→3→2→6→5或7→4→3→2→6→5。

② 7→8

每个教程的介绍:

第七套教程(共三册):VBA的EXCEL应用:是VBA的一个基本讲解。

第一套教程(共三卷):VBA代码解决方案:入门后的改进教程。

教程4(16G):VBA代码解决方案视频(第一集视频讲解)

第三套教程(共两卷):“VBA数组与字典解”:是关于数组与字典的专题讲座。

第二套教程(共两卷):“VBA数据库解决方案”:是对数据库的专门讲解。

第六套教程(共两卷):VBA信息获取与处理:讲解VBA的网络和跨程序应用。

第五套教程(共两卷):VBA课堂的解读与利用:课堂与界面技术的解读。

第八套教程(共三册):VBA的文字应用(最新教程):VBA在word中的运用

第六门课程:VBA信息获取与处理,这是一门高级课程,涵盖范围更广,实用性更强,面向中高级人才。课程共有二十个主题,包括:跨应用程序的信息获取、随机信息的利用、电子邮件发送、VBA互联网数据捕获、VBA延迟操作、剪贴板应用、Split函数扩展、工作表信息与其他应用程序的交互、FSO对象的利用、工作表和文件夹信息的获取、图形信息的获取以及工作表信息函数的定制等。该程序通过了32位和64位OFFICE系统测试。