《VBA信息获取与处理》教程(版权10178984)是我推出第六套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。这部教程给大家讲解的内容有:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网数据抓取、VBA延时操作,剪贴板应用、Split函数扩展、工作表信息与其他应用交互,FSO对象的利用、工作表及文件夹信息的获取、图形信息的获取以及定制工作表信息函数等等内容。程序文件通过32位和64位两种OFFICE系统测试。是非常抽象的,更具研究的价值。
教程共两册,二十个专题。今日分享内容是:VBA信息获取与处理第二个专题第四节:获取唯一非重复随机值的返回数组【分享成果,随喜正能量】苦难不会没完没了,幸运也不会永远持续。得意时不忘形,失意时不消沉。人生的起伏都是考验。知幻即离,一个人最了不起的能力,不是摆平任何人,而是摆正自己。。
第四节 获取唯一非重复值的返回数组讲到这里,大家对于随机数的利用应该有了一个大概的认识,但是,在第三节的程序中我们发现,在多次点击运行后,会出现数据重复的现象,如下面的截图:
而在利用随机数的场景中,有一些特例是不能重复的,比如输入源数组AA()如果是某个公司的人员编号,随机返回的是年终抽奖的结果,这个时候问题来了,在同批次得奖的人员中不可能有重复的啊?如何让返回的随机数组成的数组是唯一非重复的数组呢?我们这节就来解决这个问题。
1 思路分析及代码实现为了解决这个问题,我们只需要在产生随机数后,在源数组中将这个值的位置调整到最后,然后下一次产生随机数时在余下的源数据中产生即可。思路有了,我们看代码的实现,这节的代码和上一节是相似的,我只讲不同的部分:
T = UBound(AA)
For J = LBound(BB) To UBound(BB)
I = Int((T - Mim + 1) * Rnd + Mim)
BB(J) = AA(I)
'对源数组数据进行处理,将第i个值放到T的位置
Temp = AA(I)
AA(I) = AA(T)
AA(T) = Temp
T = T - 1
Next
代码截图:
代码讲解:上述代码中首先将源数组的最大下标值赋给T,这里的T是可变的,每次将下移一个单位,所取出的值位置I: I = Int((T - Mim + 1) * Rnd + Mim),也就是说这个范围是可变的。
① T = UBound(AA) 将源数据的最大下标值赋给T
② I = Int((T - Mim + 1) * Rnd + Mim)
BB(J) = AA(I)
取得I的随机位置,并给输出数组赋值。
③ Temp = AA(I)
AA(I) = AA(T)
AA(T) = Temp
将源数组的最后的值和第I个值交换位置。
④ T = T – 1
调整下次取得随机数的范围。
我们最后看看利用上述代码的输出:
从上面的输出看,保证了数据的唯一性。
【待续】
我20多年的VBA实践经验,全部浓缩在下面的各个教程中,教程学习顺序: