
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も見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
テニス(ダブルス)乱数表 Excelマクロ
Excel(エクセル)
-
テニスの乱数表作成
PowerPoint(パワーポイント)
-
テニス大会ダブルスの乱数表の作成をお願いしたい
PowerPoint(パワーポイント)
-
-
4
バドミントンの対戦表をエクセルで作りたいのですが
Visual Basic(VBA)
-
5
バドミントン・ミックスダブルス乱数表について
数学
-
6
エクセルで重複しない組み合わせ出力方法
Excel(エクセル)
-
7
重複しない乱数表を作る関数について
その他(暮らし・生活・行事)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
一重コートとか一重ジャケット...
-
アスファルト乳剤1tは何リット...
-
洋服の生地で「WS」の表示は?
-
バレー9チーム3コート総当た...
-
バーバリーのトレンチコート ...
-
袖の無いロングコートの呼び名は?
-
アンゴラのコートは丈夫ですか?
-
10月後半の日光の気候
-
コートを何着持っていますか?
-
「昔は、コート→外套、キス→接...
-
こっちの店の方が安かった! シ...
-
着用回数の少ないコート類をク...
-
ミルコート仕上げ(玉砂利洗い...
-
(和装)黒の道行コートって普...
-
アクアスキュータムコート、英...
-
胸が大きくてもすっきり見える...
-
10年前の双眼鏡 ラバーコート...
-
至急!!私服★ジャケットの上に...
-
奮発してカシミヤ100%のコート...
-
ホテルでディナー、服装は?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アスファルト乳剤1tは何リット...
-
「ダブルツリーByヒルトン」「...
-
洋服の生地で「WS」の表示は?
-
バレー9チーム3コート総当た...
-
一重コートとか一重ジャケット...
-
アクアスキュータムコート、英...
-
バーバリーのトレンチコート ...
-
バーバリーのコートは一生もの...
-
奮発してカシミヤ100%のコート...
-
袖の無いロングコートの呼び名は?
-
透け素材のブラウス、何月頃ま...
-
10年前の双眼鏡 ラバーコート...
-
コートは右上?左上?
-
こっちの店の方が安かった! シ...
-
マフィアと聞いて一般的にイメ...
-
リーグ戦総当り表の作成につい...
-
泊まらないけどホテルに荷物を...
-
ダウンコート肩幅43身幅52袖丈5...
-
クリーニング店に出したコート...
-
飲食店でのマナー(コート)
おすすめ情報