我们平时经常会用到随机混排,比如考试时将不同班级的学生混排、随机抽取安检人员到下面的分公司检查安全工作、秋游时随机组成小组、随机抽奖等。手动操作不仅繁杂,而且容易出错,其实对于类似的随机混排,借助Excel 2019就能高效实现。下面以随机抽取安检人员到分公司检查为例进行说明(图1)。
启动Excel后在A列中输入检查人员的姓名,在B2单元格中输入公式“=RANDBETWEEN(1,10)”并下拉(区间数字请根据人员的数量进行修改,比如有50个人就设置为1,50),该公式表示使用RANDBETWEEN函数随机生成1-10之间的整数。由于每次生成的都是随机数字,因此当A列中的数据以这个随机数字作为排序的依据时,每次的排序结果都不相同(图2)。
接下来登录“http://dwz.win/QkX”并下载所需的VBA脚本(提取码: x5r3),下载完后返回Excel,按下“Alt+F11”组合键打开VBA窗口,依次点击“插入→模块”,将下载到的脚本复制到该窗口。大家要根据实际情况修改代码,比如“For i = 9 To 2 Step -1”,表示对A9到A2单元格中的数据进行遍历,步长是“-1”,这样会依次从A9单元格一直循环显示到A2单元格,最终显示A2单元格中的数值。如果A列中的数据更多,就需要更改这里的数字。Rows(2).Delete表示删除第二行的数值,这样每运行一次脚本就会将该行所显示的数值删除,可以保证不重复显示。如果要删除其他行的数值,将这里的数字2改成相应的数字即可(图3)。
而A列的随机排序我们可以通过录制宏的方法来实现。依次点击“开发工具→录制宏”,新建一个宏1。接着开始执行下面的操作:选中A1:B9区域,依次点击“数据→排序”,在弹出的对话框中,“主要关键字”选择“随机排序”,“排序依据”选择“单元格值”,“次序”设置为“降序”,点击“确定”后停止宏的录制(图4)。
现在测试一下宏1,可以看到由于B列为随机数字,因此在A列中每次排序的结果都是不同的,即在A2单元格中显示的名字是随机的。由于默认最终显示名字的位置是C1单元格,我们还需要将每次选中的人名复制到对应分公司的单元格中,这可以借助粘贴图片的方法来实现。
复制C1单元格后定位到D2单元格,依次点击“开始→粘贴→其他粘贴选项→链接的图片”,会在D2单元格中粘贴一张图片,显示的内容为C1单元格中的数值。记住该图片的名称,比如本例为图片1(图5)。
在G9:G15单元格中依次输入分公司的名称,同上启动宏2的录制,执行下面的操作:选中图片1并复制,接着定位到H9单元格,依次点击“开始→粘贴→图片”,将图片1以“图片”的形式粘贴到H9单元格,最后再定位到图片1所在的位置,完成宏2的录制。录制完后运行宏2,查看能否将图片1复制到H9单元格(图6)。默认每运行一次脚本,C1单元格都会显示不同的人名,但是通过上述“复制→粘贴→图片”的方法,我们可以将C1单元格每次显示的人名复制并保存下来。
完成上述的操作后再测试一下所有的流程。先执行宏1,检查能否在A列实现随机排序。接着执行下载到的VBA脚本,检查能否在C1单元格中随机显示A2单元格中的人名,并同时自动删除第二行的数据。最后执行宏2,检查图片1能否成功地复制到H8单元格(因为删除了第二行的数据,因此原来的H9单元格变为H8单元格)(图7)。
测试完后如果没有问题,按下“Alt+F11”组合键打开VBA窗口,在“Sub cfan()”下添加上宏1(用于随机排序)、“Loop Until k >= 10”下添加上宏2(用于复制图片到对应的分公司),编辑完代码后返回宏窗口,为该宏设置运行快捷键为“Ctrl+R”。
返回Excel窗口,隐藏A和B列,同时调整图片1的大小和位置。以后只要每次按下“Ctrl+R”组合键,C1单元格和图片1就会循环显示A2:A9区域中的人名,最终定格显示A2单元格中的内容,接着将其复制到H9单元格。由于该脚本会自动删除第二行的数据,这样执行宏2时会依次将显示随机名字的图片复制到H2:H8区域(图8)。