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

我需要翻译一个AS / 400上的老程序,select随机的学生为我的城市工作。 我可以使用任何程序,只要它能工作。 为了简单快捷,我select了excel。

但是,我来过一个小问题。 我不需要重复,因为同一个学生在一个夏天不能做2份工作。 此外,我需要这个灵活的,因为每年,新学生将被添加,一些将被删除。

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

索引$ A:$ A获得列A中的所有行。因此,即使我添加了20个名称,也会考虑到它们。 然后,它随机select行1和行$ A中的总行数(COUNTA)之间的值(名称)。 这种方法的问题是它允许重复。

我发现的另一个function是创build一个满= ALEA()的柱子,然后按数字对这些柱子进行sorting。 这不是很漂亮,但至less没有重复。 问题来自我的公式,这是静态的,我不能灵活:

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

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

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

我打开使用某种重复检查的第一个function。 只要秘书不必操纵很多,应该没问题。

谢谢你的帮助xox

我在VBA中创build了一些我认为你想要的东西。 现在请记住,我对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生成的数字抓取列A中的名字,然后完全删除该行,从而不会生成唯一的名字。

我特意selectF列和F11格,因为删除行时单元格不会受到影响。

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

有很多例子可以做到这一点在VBA(谷歌Excel随机独特)最好的一个来自CPearson.Com其中包括(其中包括):

随机元素从一系列的工作表单元格
您也可以创build一个函数,该函数以随机顺序返回一些元素,而不会从一系列工作表单元格中重复出现。 下面的function就是这样做的。 您可以使用类似的公式调用数组公式
= RandsFromRange(A1:A10,5)
其中A1:A10是从中提取值的元素列表,5是要返回的值的数量。 在您指定要返回的单元格内input公式,然后按CTRL SHIFT ENTER而不是ENTER键。

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

  1. 在学生名字旁边插入一列,公式=RAND()
  2. 对号码列表中的姓名和随机号码进行sorting
  3. 从列表顶部挑选尽可能多的学生
  4. 每次你sorting你得到一个新的随机sorting