
No.2ベストアンサー
- 回答日時:
こんにちは。
ヒマなのでwwwwマクロ作りました。すんげぇ長文レスなので覚悟してくださいw
そもそも乱数表というものがよく判らないのですが、組み合わせの条件が相当複雑になります。
例えば下記のURL先の乱数表を見てください。
http://www.geocities.jp/ttc1jp/order.html
これの9人の列を見てほしいんですが、2コートで実施した場合、9回,10回目のところで
6番さんが両コートでプレイしなければならなくなります。
9人などコート数が2コートだけで良いのであればこういうのも排除できるんですが、
13人以上で2コートでも3コートでも出来てしまう場合、乱数表だけでは必ず6番さんのような
重複が発生してしまいます。
そこで、乱数表のフォーマットからちょびっと外れるかも知れないんですが、
(1) 最初にコート数を指定する
(2) 前回参加できなかった人(見学者)は次回に優先的に参加できる
(3) ひとりの人を同時に別コートで試合という無茶はさせない
(4) ランダムにこだわる
というマクロを作ってみました。
【つかいかた】
<マクロ準備編>
(1)新規ブックを開き、とりあえず名前をつけて保存します。『てにす乱数表.xls』にしましょうか。
(2)メニューバーから、ツール→マクロ→Visual Basic Editorを選択します。
Visual Basic Editorが起動します。
(3)左側に「VBAProject(てにす乱数表).xls」というのがあると思います。
ツリー状になっていて、左の[+]で展開していくと、「ThisWorkbook」という
ものが表示されると思います。
(4)その「ThisWorkbook」をダブルクリックします。
右側に「~~.xls - Thisworkbook(コード)」というウインドウが表示されます。
(5)そこに、下記のコードをコピー&ペーストしてください。
(6)Visual Basic Editorを閉じます。
(7)ここで一旦上書き保存しておきましょう。
<データ準備編>
(1)セルA1に、コート数を入力してください。数字でお願いします。
(2)セルB1から横方向に、人数を入れていってください。
(3)セルA2から縦方向に、試合数を入れていってください。
こんなかんじ
_A__B_C_D__E__F__G__H__I__J__K
1| 3 5 6 7 8 9 10 11 12 13 14…
2| 1
3| 2
4| 3
5| 4
6| 5
7| 6
:
<データ作成編>
(1)メニューバーから、ツール→マクロ→マクロ と選択してください。
(2)実行するマクロの一覧に「ThisWorkbook.乱数表作成」というのがでるので、
それを選択して「実行」してください。
(3)砂時計が消えたら完成です。
このマクロは実行するたびに結果が変わります。気に入らなかったら何度でも
やり直してください。
また、全セルを消去すれば、データ準備からやり直すことも出来ます。
好きな表をいくつでも作ってください。
ちなみに100人とかデータ数がえらく膨大になると、なかなか計算が終わりませんので。
その場合は気長に待ってください。
'-----マクロ ここから-----
Sub 乱数表作成()
Dim iRow As Integer
Dim iCol As Integer
Dim iCnt As Integer
Dim iCnt2 As Integer
Dim iTmp As Integer
Dim sNum() As String
Dim bChk() As Boolean
Dim bChk2() As Boolean
Dim bFull As Boolean
Dim iCourt As Integer
iCol = 2
Do Until Cells(1, iCol) = ""
iRow = 2
If Cells(1, 1) * 4 > Cells(1, iCol) Then
iCourt = Round(Cells(1, iCol) / 4 - 0.5, 0)
Else
iCourt = Cells(1, 1)
End If
ReDim sNum(iCourt * 4 - 1)
ReDim bChk(Cells(1, iCol))
ReDim bChk2(Cells(1, iCol))
For iCnt = 1 To Cells(1, iCol)
bChk(iCnt) = True
bChk2(iCnt) = True
Next iCnt
Do Until Cells(iRow, 1) = ""
iCnt = 0
Do Until iCnt = iCourt * 4
iTmp = Round(Rnd(Second(Now)) * Cells(1, iCol) + 0.5, 0)
If bChk(iTmp) And bChk2(iTmp) Then
sNum(iCnt) = "[" & Trim(Str(iTmp)) & "]"
iCnt = iCnt + 1
bChk(iTmp) = False
bChk2(iTmp) = False
bFull = False
For iCnt2 = 1 To Cells(1, iCol)
bFull = bFull Or bChk(iCnt2)
Next iCnt2
If bFull = False Then
For iCnt2 = 1 To Cells(1, iCol)
bChk(iCnt2) = True
Next iCnt2
End If
End If
Loop
Cells(iRow, iCol) = sNum(0)
For iCnt = 1 To iCourt * 4 - 1
Select Case iCnt Mod 4
Case 0
Cells(iRow, iCol) = Cells(iRow, iCol) & Chr(10) & sNum(iCnt)
Case 2
Cells(iRow, iCol) = Cells(iRow, iCol) & ":" & sNum(iCnt)
Case Else
Cells(iRow, iCol) = Cells(iRow, iCol) & sNum(iCnt)
End Select
Next iCnt
For iCnt = 1 To Cells(1, iCol)
bChk2(iCnt) = True
Next iCnt
iRow = iRow + 1
Loop
iCol = iCol + 1
Loop
End Sub
'-----マクロ ここまで-----
あー面白かったw ナイス暇つぶし。
解らないところがあったら聞いてください。
ありがとうございます。
すごく難しそうに感じますが・・・今からこれをプリントして、頑張ってやってみようと思います。ゲームのやり方としては、18人のダブルスの対戦表を作っておいて、(全ての組み合わせで)それを長い期間で消化していって、個人別に勝ち点をつけよう、という目的で使います。ダブルスなので常に2人は休みになる前提です。そうすると・・・コート数は4で作ってみれば大丈夫ですか?
No.4
- 回答日時:
A列はA1に1を入れる。
セルの右下にカーソルを合わせると黒十字のカーソルに変化する。これを必要なところまでドラッグして離し、連続データをクリックすると連続した数値が出る。B1に=RAND()と入れ、A列と同じ状態の黒十字を出し、今度は左クリックをして、下までドラッグ。(これでコピーできる。)
C1には一つずつ名前を入れる。
これで、A列の左上をクリックしてC列の右下までドラッグする。
これでセルの色が変わります。この状態でデータ→並べ替えを実行すれば、できます。
健闘を祈る!!
本当に丁寧に教えていただいてありがとうございます。
順不同で、ばらばらに並べ替えることが出来ました。
テニスのダブルス対戦表は、riodさんのやり方で作ることが出来ました。組み合わせ、並び替えなど、遠い昔の数学のようで、頭が痛くなりましたが、今回の経験で、私ももっとエクセルの事を知りたくなりました。
回答を寄せていただいた皆さんに感謝します。ありがとうございました。
No.3
- 回答日時:
>RANDの後の()の中には
何も入れません。こういう関数もあるのです。
これで、入れた範囲を選択して、データ→並べ替えで優先されるキーにRANDを入れた列を選択して改行で変化します。
あとRANDは何か確定するたびに(改行などを押す)変化します。また並べ替えた時も、数値順に並びません。ただし、ばらばらに入れ替わります。
ありがとうございます。TOngTOngさんに教えていただいて、途中になっている表でやってみていますが・・・本当に初心者で申し訳ないですー入れた範囲を選択して、とあるのは、A列にいれた1から18を選択するのですか?また、RANDを挿入するのはB1セルでいいのですか?
わからないことだらけの私ですが、親切な方がたくさんいるのだ、と初めてこの掲示板を利用して感激しています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アスファルト乳剤1tは何リット...
-
バレー9チーム3コート総当た...
-
クリーニング店に出したコート...
-
「ラグラン袖」とは何でしょう?
-
アクアスキュータムコート、英...
-
アクアスキュータムのステンカ...
-
昨年クリーニングでコートのベ...
-
バーバリーのトレンチコート ...
-
コートを何着持っていますか?
-
好きな人とご飯に行く時の服装...
-
色違いでコート購入するのはあ...
-
女性に聞きたい、外見の印象
-
テニス 乱数表
-
ミルコート仕上げ(玉砂利洗い...
-
ディズニーランドでの服装は?
-
このコーデどうおもいますか!...
-
あるコートを探しています。コ...
-
キャメルのコートがやっぱ1番合...
-
電車の中で汗をかく人とかかない人
-
コートのチャック閉めないで歩...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バレー9チーム3コート総当た...
-
アスファルト乳剤1tは何リット...
-
洋服の生地で「WS」の表示は?
-
クリーニング店に出したコート...
-
職場の飲み会(ほぼ同僚と仲の...
-
こっちの店の方が安かった! シ...
-
【緊急】スーツの背中にある縫...
-
EAST BOYを大学生・社会人が着...
-
デパート店員の接客にがっかり...
-
スーツの上にコートを羽織ると...
-
道行コートの袖丈と着物の袖丈
-
登別-洞爺湖周辺観光時の服装...
-
テニス大会ダブルスの乱数表の...
-
飲食店でのマナー(コート)
-
リーグ戦総当り表の作成につい...
-
細身のコート
-
お店でコートを間違えられました。
-
ストレート スロットルバルブク...
-
上着や防寒具を脱ぐか脱がないか
-
長渕剛が着てた服のメーカー
おすすめ情報