将随机数分配给Excel中的名称列

我想做一场比赛洗牌。 例如,我有15名球员,我想创build一个附加表。

所以我的想法会以这样一种方式工作,即将所有球员写在栏中,让我们说它是栏B.然后,所谓的macros将为范围1-playerCount中的每个玩家起草一个数字(一个玩家一个数字) 。 之后,玩家被分配到季后赛桌上(这在使用边界线的Excel中很容易实现)。

以编码的方式,它可以工作在一个列中的每个人被起草一个数字。 这些数字在一个列表中。 所以假设我们有15名选手,起先列表中有1-15个数字。 然后一个列表被洗牌(基本上与起草一个随机数相同,但我们不必开始search未分配的数字)。 第一个元素(或最后一个,不pipe什么)将被分配给玩家。 所以现在玩家们都会得到随机数字,然后把他们拖到桌子上。 这些数字1-15可能代表列X可能,名称应该进入,然后在此列中的值更改。

我的问题是 – 要实现这样的事情有多难? 作为一个Java程序员,我看着这个想法,我想在JAVA中做一些事情不应该花很长时间,而且会很容易。 与JAVA的问题是,那么需要编写用户界面,并创buildUI,这使得季后赛表不是最简单的解决scheme。

下面的代码适用于无限数量的人。 请注意,添加的人越多,代码运行的时间就越长,因为它必须一遍又一遍地检查所有内容。

Private Sub numb_ass() Dim i As Integer: i = 1 Dim v As Integer Dim lr As Integer Dim t As Integer: t = 1 With ActiveSheet lr = .Cells(.Rows.Count, "A").End(xlUp).Row End With Do Until i > lr NewNumber: v = Int(lr * Rnd() + 1) Do Until t > lr If v = Range("B" & t) Then If t > lr Then: Exit Sub t = 1 GoTo NewNumber End If t = t + 1 If t > lr Then: Range("B" & i) = v Loop t = 1 i = i + 1 Loop End Sub 

如果您希望先打开loggingmacros。 说名字在ColumnB中,ColumnC中的1> 15(都在Row1中开始)。 在A1中复制到A15,input:

 =RANDBETWEEN(1,1000) 

A上的ColumnA:Bsorting

如果你不想使用sorting,你也可以这样做:

  ABC 1 Player Name | Rand | Player Number ============+======+============================== 2 John | =Rand() | =COUNTIF($B$2:$B$6,">"&B2) 3 James | =Rand() | =COUNTIF($B$2:$B$6,">"&B3) 4 Jim | =Rand() | =COUNTIF($B$2:$B$6,">"&B4) 5 George | =Rand() | =COUNTIF($B$2:$B$6,">"&B5) 6 Pete | =Rand() | =COUNTIF($B$2:$B$6,">"&B6) 

它是如何工作的? 每次工作表被更改/刷新时,B列中都会生成一个新的随机数.C列仅计算该行中有多less个数大于B列中剩余的数。

Rand()值完全相同的机会是最小的,所以你不应该担心有相同的nubmer球员。