Excel 从一组30个值中随机填写25个值的表格?

Excel 从一组30个值中随机填写25个值的表格?,excel,Excel,我想制作一系列表,每个表包含25个值,这些值来自一组30个值。如何快速、随机地生成这些表?我想知道excel中是否有方法,或者我是否需要自己编程?如果是,哪种语言最简单(Python、C、Java) 编辑:25个值将不包括重复。换句话说,我正在寻找值的随机组合(30C25)。在Excel中列出30个值的列表,行数大于25(比如List30),然后在A1中复制到A25,并全部复制以适应: =INDEX(List30,RANDBETWEEN(1,30)) =RAND() 要排除重复(因此

我想制作一系列表,每个表包含25个值,这些值来自一组30个值。如何快速、随机地生成这些表?我想知道excel中是否有方法,或者我是否需要自己编程?如果是,哪种语言最简单(Python、C、Java)


编辑:25个值将不包括重复。换句话说,我正在寻找值的随机组合(30C25)。

在Excel中列出30个值的列表,行数大于25(比如
List30
),然后在A1中复制到A25,并全部复制以适应:

=INDEX(List30,RANDBETWEEN(1,30))  
=RAND()  
要排除重复(因此不是随机选择),您可以在A1:A30和B1中输入您的列表,并复制以适应:

=INDEX(List30,RANDBETWEEN(1,30))  
=RAND()  

然后对B列上的A:B进行排序,并复制A1:A25以将say粘贴到D1。这样一次只生成一个集合(每次粘贴后必须重复排序/复制/粘贴)

您最终可以添加以下自定义用户定义函数,然后将其用作数组公式。将代码添加到代码模块模块1:

Public Function RandUnique(src As Range) As Variant
    Dim v As Variant: v = src
    Randomize
    Dim i As Integer, j As Integer, temp As Variant
    For i = 1 To src.Rows.count
        j = 1 + Int(Rnd * src.Rows.count)
        temp = v(i, 1): v(i, 1) = v(j, 1): v(j, 1) = temp
    Next
    RandUnique = v
End Function
添加此自定义项后

Select the destination range, enter in the formula bar the following formula

=RandUnique($A$1:$A$30)     ' <~~ set it to your source range of 30 values

Then press Ctrl+Shift+Enter
选择目标范围,在公式栏中输入以下公式

=RandUnique($A$1:$A$30)这里有一个有趣的方法,它不需要VBA,也不需要任何手动排序

  • 在A1:A30范围内输入源列表

  • 在单元格B1中输入以下公式:

    =选择(介于(1,7),7,11,13,17,19,23,29之间)

  • 在C1:C30范围内输入以下公式:

    =索引(A$1:A$30,MOD(行(A$1:J1)*B$1,30))

  • 在单元格D1中输入以下公式:

    =RANDBETWEEN(1,30)

  • 现在选择任意25个连续的垂直和空单元格,并输入以下公式:

    =索引($C$1:$C$30,MOD(D$1+行($A$1:$J1),30)+1)

现在复制25个单元格并粘贴为第一个表的某个位置的值。按键盘上的F9键,获得一个新的25;复制并粘贴为第二个表的某个位置的值。按键盘上的F9键,获得一个新的25;复制并粘贴为第三个表的某个位置的值。根据需要不断重复多张表


请注意,虽然这看起来非常随机(没有重复),但它根本不是随机的。这是一个复杂的干扰模式,除非您是唯一的干扰模式,否则它将完全随机出现。

这25个值必须不同吗?(不允许重复?)是的,这是需要的。在这种情况下,我认为你应该使用一些编程。带VBA的自定义项是一个很好的选择,非常感谢!有并没有一种方法可以避免重复的随机输入,我只是得到30个值的随机组合?(30C25)?您可以将上述内容与来自的一些VBA结合使用。请参阅页面的“获取唯一、非重复值数组”部分。非常感谢。就我的项目而言,它不一定是真正随机的,因为值需要看起来是随机的,所以这就足够了。非常感谢您的时间和帮助。非常感谢您的帮助。这非常有效,而且您的指示很容易遵循。我感谢你花时间帮我解决问题。