案例说明:在1至30中1到10选2个,11到20选3个,21到30选1个,用Excel如何编程?
案例的意图实际上就是在指定数据段中随机选择2个数字的意思。
从1~10; 11~20;20~30选择随机数。 可以使用VBA函数Rnd函数进行, 这是一个随机数函数,返回一个小于1但是大于等于0的随机数。 有关Rnd函数的详细说明和示例,请参考《神奇的VBA》插件(自行头条、百度或者知乎搜索该插件)进行学习和阅读。
运用该函数,我们可以这样编程:
其中的Int(((10 - 1 + 1) * Rnd) + 1)结构,我有意写的这么复杂, 这是为了更方便的重复运用该结构, 例如从21到30 的随机数,可以写作Int(((30 - 21 + 1) * Rnd) + 21). 这样就非常便于理解。 其中Int函数将最终随机数做了求整处理。 如果你目前基础不够,暂时还不能吃透整个一句的含义的话,没有任何关系,你就先这么用着。以后就明白了。
好了, 上面的VBA程序中写了个最基本的随机数程序。 举一反三,11~20数据段中取3个数以及21~30数据段中任取1个数。 就很简单了,见下面示例:
好了, 看到现在,可能你会提出疑问了。我想要的是随机但又不重复的两个数怎么办? 很好办, 我们可以在程序中添加循环语句, 通过循环将本次产生的随机数跟上次进行对比, 如果不相同就采用该随机数并结束循环,否则继续循环生成随机数直至不相同。我们使用Do...Loop循环结构进行判断。有关Do..Loop循环结构,请参考《神奇的VBA》插件(自行头条、百度或者知乎搜索该插件)进行学习和阅读。
上面的示例很好的满足了需求。 21~30任取一个随机数,我们就不看了。 因为只需要1个,就不需要使用循环了,下面我们看看11~20数据段获取3个不重复的随机数。 该怎么操作呢? 方法可能很多,但是我脑子的第一反应是继续使用循环喽。好的我继续编程:
好了,上面的代码应该已经很好的满足我们对于指定数据段任选不重复的数据要求了。
不过看完之后是不是觉得代码看上去一点都不简洁 ? 我也这么觉得, 我们可以将生成随机数的代码段抽象做一个通用的函数。
Int(((20 - 11 + 1) * Rnd) + 11)
我们使用Function函数进行改写,我将函数名称随便地设置为GetRndNumber:
有关Function自定义函数的知识,请参考《神奇的VBA》插件(自行头条、百度或者知乎搜索该插件)进行学习和阅读。
这个自定义GetRndNumber函数对照我开头针对Int(((10 - 1 + 1) * Rnd) + 1)结构进行的说明,是不是清晰了很多?
下面我使用GetRndNumber()函数改写1~10数据段任选2个不重复数的代码示例
动手试一试, 复制代码运行下吧~~!
有关Excel VBA编程知识(超多职场牛人的必备秘技),可下载安装使用一款优秀职场人必备的工具《神奇的VBA》插件,一款嵌入进Excel Ribbon界面,打开任意Excel工作簿就能随时查阅学习VBA编程的Excel 插件。