2015-02-04 6 views
0

Я бы хотел перетасовать турнир. Например, у меня 15 игроков, и я бы хотел создать таблицу плей-офф.Назначение случайных чисел столбцу имен в Excel

Так что моя идея будет работать так, что я напишу всех игроков в столбце, скажем, это столбец B. Тогда так называемый макрос будет рисовать число для каждого игрока в диапазоне 1-playerCount (одно число для одного игрока). После этого игроки назначаются в таблице плей-офф (что очень удобно в Excel с границами).

В способе кодирования он может работать таким образом, что каждый человек в столбце получает черновик. Номера указаны в списке. Итак, скажем, у нас 15 игроков, сначала в списке есть цифры 1-15. Затем список перетасовывается (в основном так же, как составление случайного числа, но нам не нужно начинать поиск неназначенных номеров). Первый элемент (или последний, не имеющий значения) будет назначен для игрока. Итак, теперь игроки получают случайные числа, которые будут рисовать их в таблице. Эти цифры 1-15 могут представлять собой столбец X, возможно, где должны входить имена, а затем значения в этом столбце меняются.

Мой вопрос: насколько сложно было реализовать такие вещи? Как программист на Java, я смотрю эту идею, и я думаю, что что-то делать в JAVA это не займет много времени и будет довольно легко. Проблема с JAVA заключается в том, что тогда пользовательский интерфейс должен быть закодирован и создать пользовательский интерфейс, который делает таблицы плей-офф не самым простым решением.

+0

Похоже, что у вас неплохой план, и его не следует выполнять слишком сложно с некоторыми исследованиями и соображениями. Вероятно, следует начинать с google. Сделайте немного исследований по функции randbetween. Как только у вас это будет, сделайте немного больше поиска на функциях или субмаринах, которые возвратят только неиспользуемые числа (или что-то в этом роде). После этого отпустите его и отправьте обратно, если вы застрянете. Обязательно опубликуйте, что вы пробовали, что не сработало и чего вы ожидаете. – sous2817

ответ

1

Следующий код работает для бесконечного числа людей. Обратите внимание: чем больше людей вы добавите, тем дольше будет работать код, потому что он должен проверять все снова и снова.

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 
+0

Спасибо, это сделало то, что я хотел – charen

+0

Всего несколько последующих вопросов - это нормально для него, если он уже запустил его один раз и не удалил пустое место в столбце результата (B)? Второй вопрос, как мне изменить, что счет начинается со второй строки, а не первой? – charen

+1

Что касается первого вопроса, я думаю, этого можно избежать, если программа сначала проверит, будет ли область, где будут отображаться случайные числа (столбец B), пустой или нет, а затем сначала очистите ее. – charen

0

Включите макрос записи, если хотите. Скажем, имена находятся в столбце B, 1> 15 в столбце C (начиная с Row1). В A1 и скопировано до A15 введите:

=RANDBETWEEN(1,1000) 

вид Columna: B на A.

+0

Это может сработать, но оно начинает повторно использовать числа, которые уже используются. Например, игроку F и игроку B можно присвоить номер 6. – charen

+0

Если у вас есть пятнадцать имен, а номера с 1 по 15 не должны приводить к повторному использованию. – pnuts

0

Если вы не хотите использовать сортировку, вы также можете сделать это следующим образом:

 A   B     C 
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 просто подсчитывается, сколько чисел в этой строке больше, чем остальные значения в столбце B.

Вероятность того, что значения Rand() будут точно такими же то же самое минимально, поэтому вам не стоит беспокоиться о том, что у игроков есть тот же самый нубмер.

+0

Насколько они минимальны, если я использую, например, 64 игрока? – charen

+0

Я предпочитаю, чтобы опция сортировки сохраняла контроль над тем, когда генерируется новый набор (при каждом изменении может запутаться), и сортировка касается возможности дублирования чисел из функции rand. – pnuts

+1

Я бы так сказал, номер, созданный Rand, выглядит так: «0.537072112173298», поэтому я думаю, что это довольно безопасно.Но у @pnuts есть точка, это непрактично, поскольку Rand изменяется при каждом изменении на листе, я имел в виду это только как доказательство концепции. Если вы получите VBA для обработки вашего поколения Rand(), было бы лучше, конечно. –

Смежные вопросы