这个问题其实有非常简单的解决办法,就是利用Excel中的随机函数rand(),该函数能返回一个(0,1)之间的随机小数(不包含0与1)。假设有如下图所示的一张工作表,有一列【序号】,从1-48编号。

现在,在“序号”列左侧插入一个空列,并在A1单元格中输入一个标头,如id,然后在A2单元格中输入一个公式【=rand()】,按回车键确认输入即可得到一个随机的小数,然后用公式复制方式向下填充单元格至A49,如下图示:

接下来,选中A2:B49单元格区域,然后以第1列ID为排序关键词从小到大或从大到小排序(均可),如下图所示:

单击“确定”按钮后,可以看到如下图所示的结果,这时,B列中的1-48号编排已经随机打乱了。

重新按第1列排序,又可以得到1-48编号的另一个随机排序。如果数据需要横向显示,可以在此基础上,进行“复制”,再进行“转置”粘贴即可。

因为Excel中的Rand()函数产生的是一个(0,1)之间的一个随机小数,所示你调用该函数n次,它产生的重复数据可能性几乎为0。
当然我们也可以用VBA宏或Python来实现此类问题。如果用Python来实现,则非常简单,因为Python中有一个内置模块random,调用其中的shuffle方法,可以直接打乱一个列表数据,如下图示:
# -*- coding: utf-8 -*-import random#产生列表[1,2,3,...,48]lst=[k for k in range(1,49)]#打乱列表random.shuffle(lst)print(lst)用VBA实现相对繁琐一些,这里不再赘述。
我是,关注我,持续分享更多的Excel知识与操作技巧。