随机excel函数,没有重复和不固定的数据

时间:2012-07-18 20:21:38

标签: excel random duplicates rank

我需要翻译一个在AS / 400上工作的旧程序,该程序正在挑选随机学生为我的城市工作。我可以使用任何程序,只要它有效。为了简单快速,我选择了excel。

然而,我遇到了一个小问题。我需要没有重复,因为同一个学生在一个夏天不能做两份工作。此外,我需要灵活,因为每年都会增加新学生,有些学生将被删除。

这个功能几乎和我想要的一样多: 的 = INDEX($ A:$ A,RANDBETWEEN(1,COUNTA($ A:$ A)),1)

索引$ A:$ A获取A列中的所有行。因此,即使我添加了20个名称,也需要考虑它们。然后,它随机选择第1行与$ A列中总行数(COUNTA)之间的值(名称)。这种方法的问题在于它允许重复。

我发现的另一个功能是创建一个充满= ALEA()的列,然后按数字对它们进行排名。这不是很漂亮,但至少没有重复。问题来自我的公式,这是静态的,我不能灵活:

= INDEX($ A $ 2:$ A $ 74 RANK(B2,$ B $ 2:$ B $ 74))

我的名字在colum $ A中,而我的随机值在colum $ B中。我所说的是,将值排在B列中的B2(然后是B3,然后是B4等)。

我想要的是将COUNTA集成到第二个函数中并且(如果可能的话)使用RANDBETWEEN而不是rank函数,这样我就没有丑陋的数字。

我打开使用第一个函数进行某种重复检查。只要秘书不需要做很多操作,就应该没问题。

非常感谢您的帮助xox

2 个答案:

答案 0 :(得分:1)

我在VBA中创建了一些我认为你想要的东西。现在记住我对VBA很新,所以它可能不是最漂亮的东西。为了清楚起见,我在第1行到第10行的A列中有10个名字,然后简单地运行这个子程序,它在F列中生成了一个唯一名称列表。这是我的代码:

Sub getRandom()
    Do While Application.WorksheetFunction.CountA(Range("A:A")) > 0
        Dim count As Integer
        count = Application.WorksheetFunction.CountA(Range("A:A"))
        Dim name As String
        name = Application.WorksheetFunction.Index(Range("A:A"), Application.WorksheetFunction.RandBetween(1, count))
        Dim row As Integer
        row = Application.WorksheetFunction.Match(name, Range("A:A"), 0)
        Range("F11").Select
        Selection = name
        Rows(row).EntireRow.Delete
    Loop
End Sub

如果您想一次获取一个名称,只需删除循环即可。它是如何工作的,它完全与您对INDEX和RANDBETWEEN函数所做的一样,用生成的数字抓取A列中的名称,然后完全删除该行,因此不会生成唯一的名称。

我特意选择了列F和细胞F11,因为当删除行时,该单元格不会受到影响。

我希望这会有所帮助,如果不是你想要的东西,我会看看我是否可以加强它。

答案 1 :(得分:0)

在VBA中有很多可用的例子(谷歌Excel随机唯一)其中一个最好的是来自CPearson.Com,其中包括(其中包括):

  

来自一系列工作表单元格的随机元素
  您还可以创建一个函数,该函数以随机顺序返回多个元素,并且不会从一系列工作表单元格中重复。以下功能就是这样做的。您可以使用类似
的公式调用数组公式   = RandsFromRange(A1:A10,5)
  其中A1:A10是从中拉取值的元素列表,5是要返回的值的数量。在您指定要返回的单元格数量的范围内输入公式,然后按CTRL SHIFT ENTER而不是ENTER。

如果您不想使用VBA,那么可以通过几个简单的步骤完成:

  1. 在学生姓名旁边插入一个列,其中包含公式=RAND()
  2. 对数字
  3. 上的名称和随机数列表进行排序
  4. 从列表顶部选择尽可能多的学生
  5. 每次排序时,您都会获得新的随机排序