查询某一时间段内数据_神奇的VBA:指定数据段内选择随机数

0afe9df49a74d05d8acb85103ab027a2.png

案例说明:在1至30中1到10选2个,11到20选3个,21到30选1个,用Excel如何编程?

f99eaaae57afd7187ed9e1f125c3ab84.png

案例的意图实际上就是在指定数据段中随机选择2个数字的意思。

从1~10; 11~20;20~30选择随机数。 可以使用VBA函数Rnd函数进行, 这是一个随机数函数,返回一个小于1但是大于等于0的随机数。 有关Rnd函数的详细说明和示例,请参考《神奇的VBA》插件(自行头条、百度或者知乎搜索该插件)进行学习和阅读。

运用该函数,我们可以这样编程:

8ade7c449e52b5147baa33cb738ccfe1.png

a06b4204776230544964eb070ca670e2.png

其中的Int(((10 - 1 + 1) * Rnd) + 1)结构,我有意写的这么复杂, 这是为了更方便的重复运用该结构, 例如从21到30 的随机数,可以写作Int(((30 - 21 + 1) * Rnd) + 21). 这样就非常便于理解。 其中Int函数将最终随机数做了求整处理。 如果你目前基础不够,暂时还不能吃透整个一句的含义的话,没有任何关系,你就先这么用着。以后就明白了。

好了, 上面的VBA程序中写了个最基本的随机数程序。 举一反三,11~20数据段中取3个数以及21~30数据段中任取1个数。 就很简单了,见下面示例:

8ade7c449e52b5147baa33cb738ccfe1.png

f217206f6ecdc382cc6fdfb95fd4dfe5.png

6330ff841f1e4e1e4622067921aac0fe.png

好了, 看到现在,可能你会提出疑问了。我想要的是随机但又不重复的两个数怎么办? 很好办, 我们可以在程序中添加循环语句, 通过循环将本次产生的随机数跟上次进行对比, 如果不相同就采用该随机数并结束循环,否则继续循环生成随机数直至不相同。我们使用Do...Loop循环结构进行判断。有关Do..Loop循环结构,请参考《神奇的VBA》插件(自行头条、百度或者知乎搜索该插件)进行学习和阅读。

8ade7c449e52b5147baa33cb738ccfe1.png

ee0226a1f67821517b132b812466a4d0.png

上面的示例很好的满足了需求。 21~30任取一个随机数,我们就不看了。 因为只需要1个,就不需要使用循环了,下面我们看看11~20数据段获取3个不重复的随机数。 该怎么操作呢? 方法可能很多,但是我脑子的第一反应是继续使用循环喽。好的我继续编程:

8ade7c449e52b5147baa33cb738ccfe1.png

c31e749fa74aaf08644b107060391f63.png

好了,上面的代码应该已经很好的满足我们对于指定数据段任选不重复的数据要求了。

不过看完之后是不是觉得代码看上去一点都不简洁 ? 我也这么觉得, 我们可以将生成随机数的代码段抽象做一个通用的函数。

Int(((20 - 11 + 1) * Rnd) + 11)

我们使用Function函数进行改写,我将函数名称随便地设置为GetRndNumber:

有关Function自定义函数的知识,请参考《神奇的VBA》插件(自行头条、百度或者知乎搜索该插件)进行学习和阅读。

8ade7c449e52b5147baa33cb738ccfe1.png

7d69098a2ac5d60db72043064e188e03.png

这个自定义GetRndNumber函数对照我开头针对Int(((10 - 1 + 1) * Rnd) + 1)结构进行的说明,是不是清晰了很多?

下面我使用GetRndNumber()函数改写1~10数据段任选2个不重复数的代码示例

9605dd1654e0463285d2368fd3e42e5a.png

动手试一试, 复制代码运行下吧~~!

有关Excel VBA编程知识(超多职场牛人的必备秘技),可下载安装使用一款优秀职场人必备的工具《神奇的VBA》插件,一款嵌入进Excel Ribbon界面,打开任意Excel工作簿就能随时查阅学习VBA编程的Excel 插件。

32289623996ea5ce1b8a5e90948df85d.png

c82ce76ba5113ccd8f81bbc2d871811e.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值