如何在Excel中获得没有重复的随机样本

  • Share This
Michael Brown

本教程主要介绍如何在Excel中进行无重复的随机抽样。 你会发现Excel 365、Excel 2021、Excel 2019和早期版本的解决方案。

前段时间,我们介绍了一些在Excel中进行随机选择的不同方法。 这些解决方案大多依赖于RAND和RANDBETWEEN函数,这些函数可能会产生重复的数字。 因此,你的随机样本可能包含重复的值。 如果你需要一个没有重复的随机选择,那么就使用本教程中描述的方法。

    Excel从列表中随机选择,没有重复的内容

    只在支持动态数组的Excel 365和Excel 2021中工作。

    要从一个没有重复的列表中进行随机选择,请使用这个通用公式。

    INDEX(SORTBY( 数据 , randarray(rows( 数据 )), SEQUENCE( n ))

    在哪里? n 是所需的选择尺寸。

    例如,要从A2:A10的列表中获得5个独特的随机名字,这里是要使用的公式。

    =index(sortby(a2:a10, randarray(rows(a2:a10)), sequence(5))

    为了方便起见,你可以在一个预定义的单元格(如C2)中输入样本量,并向SEQUENCE函数提供该单元格的参考。

    =index(sortby(a2:a10, randarray(rows(a2:a10)), sequence(c2))

    这个公式如何运作。

    下面是对该公式逻辑的高级解释:RANDARRAY函数创建了一个随机数的数组,SORTBY按这些数字对原始值进行排序,INDEX检索SEQUENCE指定的多少个值。

    下面是详细的分类。

    ROWS函数计算你的数据集包含多少行,并将该计数传递给RANDARRAY函数,这样它就可以生成相同数量的随机小数。

    randarray(rows(a2:c10))

    这个随机小数数组被SORTBY函数用作 "排序 "数组。 结果,你的原始数据被随机地洗牌。

    从随机排序的数据中,你提取一个特定大小的样本。 为此,你向INDEX函数提供洗牌后的数组,并要求检索第一个 N 值在SEQUENCE函数的帮助下,产生一个从1到2的数字序列。 N 因为原始数据已经按随机顺序排序,我们并不关心要检索哪些位置,只关心数量。

    在Excel中选择没有重复的随机行

    只在支持动态数组的Excel 365和Excel 2021中工作。

    要选择没有重复的随机行,可以这样建立一个公式。

    INDEX(SORTBY( 数据 , randarray(rows( 数据 )), SEQUENCE( n ), {1,2,...})

    在哪里? n 是样本大小,{1,2,...}是要提取的列号。

    作为一个例子,让我们从A2:C10中选择没有重复条目的随机行,基于F1中的样本量。 由于我们的数据是3列,我们向公式提供这个数组常数:{1,2,3}。

    =index(sortby(a2:c10, randarray(rows(a2:c10)), sequence(f1), {1,2,3})

    并得到以下结果。

    这个公式如何运作。

    该公式的工作逻辑与之前的公式完全相同。 一个小的变化带来了很大的不同,就是你同时指定了 行数_num 列_num INDEX函数的参数。 行数_num 是由SEQUENCE提供的,而 列_num 由阵列常数决定。

    如何在Excel 2010中进行随机抽样 - 2019年

    由于只有Excel for Microsoft 365和Excel 2021支持动态数组,前面例子中使用的动态数组函数只能在Excel 365中使用。 对于其他版本,你必须制定一个不同的解决方案。

    假设你想从A2:A10的列表中随机选择,这可以用两个单独的公式来完成。

    1. 用Rand公式生成随机数。 在我们的例子中,我们在B2中输入,然后向下复制到B10。

      =RAND()

    2. 用下面的公式提取第一个随机值,你在E2中输入这个公式。

      =index($a$2:$a$10, rank.eq(b2, $b$2:$b$10) + countif($b$2:b2, b2) - 1)

    3. 将上述公式复制到你想挑选的任意数量的单元格中。 在这个例子中,我们想要4个名字,所以我们从E2到E5复制这个公式。

    完成了!我们没有重复的随机样本看起来如下。

    这个公式如何运作。

    和第一个例子一样,你使用INDEX函数从A列中根据随机行号检索数值。 不同的是你如何获得这些数字。

    RAND函数用随机小数填充B2:B10的范围。

    RANK.EQ函数计算一个随机数在指定行中的排名。 例如,在E2中,RANK.EQ(B2, $B$2:$B$10)将B2中的数字与B2:B10中的所有数字进行排名。 当复制到E3时,相对引用B2变为B3,并返回B3中数字的排名,以此类推。

    COUNTIF函数找出上述单元格中给定数字的出现次数。 例如,在E2中,COUNTIF($B$2:B2, B2)只检查一个单元格--B2本身,并返回1。在E5中,公式变为COUNTIF($B$2:B5, B5)并返回2,因为B5包含与B2相同的值(请注意,这只是为了更好地解释公式的逻辑;在一个小数据集中,有可能得到重复的随机数接近于零)。

    结果是,对于所有第1次出现的情况,COUNTIF返回1,从中减去1以保持原来的排名。 对于第2次出现的情况,COUNTIF返回2。 通过减去1,你的排名增加了1,从而防止重复排名。

    例如,对于B2,RANK.EQ返回1,由于这是第一次出现,COUNTIF也返回1,RANK.EQ+COUNTIF得到2,而-1恢复了等级1。

    现在,看看在第二次出现的情况下会发生什么。 对于B5,RANK.EQ也返回1,而COUNTIF返回2。 将这些相加得到3,从中减去1,作为最终结果,你得到2,这代表B5中数字的等级。

    级别到了 行数_num 的参数,并从相应的行中选取数值(即 列_num 参数被省略,所以默认为1)。 这就是为什么避免重复排名如此重要的原因。 如果没有COUNTIF函数,RANK.EQ会对B2和B5都产生1,导致INDEX两次返回第一行的值(Andrew)。

    如何防止Excel随机样本变化

    由于Excel中的所有随机化函数,如RAND、RANDBETWEEN和RANDARRAY都是不稳定的,它们会随着工作表中的每一个变化而重新计算。 因此,你的随机样本会不断变化。 为了防止这种情况发生,请使用粘贴特殊>值功能,用静态值替换公式。 为此,请执行以下步骤。

    1. 选择所有带有你的公式的单元格(任何含有RAND、RANDBETWEEN或RANDARRAY函数的公式),按Ctrl+C复制它们。
    2. 右键单击所选范围并单击 粘贴专用 > 价值观 或者,按Shift + F10,然后按V,这是上述功能的快捷键。

    详细步骤请见《如何在Excel中把公式转换成数值》。

    Excel随机选择:行、列或单元格

    在Excel 365到Excel 2010的所有版本中工作。

    如果你在Excel中安装了我们的Ultimate Suite,那么你可以用鼠标点击而不是用公式来做随机抽样。 下面是方法。

    1. 关于 Ablebits工具 标签,点击 随机化 > 随机选择 .
    2. 选择你想从中挑选样本的范围。
    3. 在该插件的窗格中,做以下工作。
      • 选择你是否要选择随机的行、列或单元格。
      • 定义样本量:可以是一个百分比或数字。
      • 点击 选择 按钮。

    就这样!如下图所示,在你的数据集中直接选择了一个随机样本。 如果你想把它复制到某个地方,只需按常规的复制快捷键(Ctrl + C)。

    这就是如何在Excel中选择一个没有重复的随机样本。 感谢你的阅读,希望下周在我们的博客上见到你!

    可用的下载

    无重复的随机样本--公式示例(.xlsx文件)

    终极套房14天全功能版(.exe文件)

    Michael Brown is a dedicated technology enthusiast with a passion for simplifying complex processes using software tools. With more than a decade of experience in the tech industry, he has honed his skills in Microsoft Excel and Outlook, as well as Google Sheets and Docs. Michael's blog is dedicated to sharing his knowledge and expertise with others, providing easy-to-follow tips and tutorials for improving productivity and efficiency. Whether you're a seasoned professional or a beginner, Michael's blog offers valuable insights and practical advice for getting the most out of these essential software tools.