
大多数情况下,我们在 Excel 中是需要把数据排序,以使得数据更有逻辑,但有一些场景下,我们可能还需要把数据打乱或随机排序。
例如你要做一个抽奖功能,可以通过随机排序实现;或者你是培训/团建活动的组织者,需要把所有参加人员打乱重新编组;或者你是 HR,需要进行随机地安排值班人员出勤等等。
那在 Excel 怎么去实现随机分组呢?
01 插入随机数排序
对于一次性随机化需求,添加随机数辅助列是最简单的方法。在需要排序的数据旁边插入一个新的辅助列,用RAND()
可以生成 0 到 1 之间的随机小数:
然后先选择随机数这一列里任意一个数值,再通过手工点击升序/降序,就能把连续区域的相邻列也一起排序,实现对数据随机排序的效果。
这里有个小细节,可能你会发现,明明你点了升序/降序,但为什么随机数这一列的顺序好像没排过序一样呢?
其实是因为你每点击一次排序,会导致RAND()
函数重新计算,又生成了新的随机数。所以这也是为什么你多次点击排序时,得到的是不同的排序结果。这意味着你可以多次点击排序,再加以人工判断,以达到你想要的乱序结果。
除了
RAND
函数外,你还可以使用RANDBETWEEN
,但要注意RANDBETWEEN
是生成随机整数的,你设置的范围应该要足够宽,至少得覆盖待排序的项目,这样才有更好的随机效果。
02 不更改数据源排序
上面的方式是直接在数据源中处理,如果你没有备份的话,可能会导致原来的顺序丢失。或者你想对照着源顺序去进行排序时,就可以使用以下这种方法。
需要你的 Excel 是 2021 版本以上或者 365 版本,可以使用SORTBY
和RANDARRAY
来实现在数据源的外部进行随机排序。
= SORTBY(A2:A11, RANDARRAY(ROWS(A2:A11)))
SORTBY
的第一个参数,就是你要排序的表格区域,然后第二个参数就是排序依据,这里使用了RANDARRAY(ROWS(A2:A11))
生成一个随机数列为排序依据,其中的ROWS(A2:A11)
是用来计算待排序区域有几行的。本质上和第 1 种方法是一样的。
ps:通过不断按 F9 快捷键,让函数重新计算,就能获得不同的乱序结果。
你可以结合表格的自适应,或者 offset 函数构造动态区域,就可以实现用函数随机排序自动化,下次有数据更改时也能自动排序。
03 通过 Power Query 排序
Power Query 是 Excel 中非常强大的数据转换工具,如果你希望构建一个自动化的排序流程。例如你这次是对 10 个员工进行排序,下次可能是 100 个员工,如果这种事情你经常要做,你用 Power Query 把它设计成自动化的处理流程也是很方便的。
把数据导入Power Query导入 Power Query 后,我们的思路和第 1 种方法类似,也是通过添加随机数列,以实现随机排序。
插入随机数列进行排序图中在 Power Query 中插入随机数时,使用的是List.Random(1)
这个写法,表示的是生成一个 1 个元素的随机数组,然后我们通过提取值
把数据提取出来,再进行排序即可。
排好序后,就可以把辅助列删除了,当你下次刷新时 Power Query 会重新跑一下图中所有的操作流程,实现自动随机排序。
最后加载回到工作表中即可,需要随机排序时,只需要点击“全部刷新”,就能不断刷新随机排序结果了。
刷新随机排序结果要注意的是 Power Query 不适合使用
Number.Random()
来生成随机数列,因为在表格里它会每一行都生成一样的随机数,这样就没法排序区分了,你也可以自行测试下。
总结
一次性需求,就用RAND
函数生成随机数列解决,但要注意下是否需求复制一份数据去操作,以避免对数据源进造成不可恢复的更改;经常性的任务, 可以用SORTBY
和RANDARRAY
实现自动化,当然也能用 Power Query 实现自动化,它们都不会影响源数据。
希望本文对你有帮助,可以点个小赞支持一下,下次再继续原创更多干货~