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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
洋服の生地で「WS」の表示は?
-
コートから抜ける毛。。。
-
アスファルト乳剤1tは何リット...
-
ウール素材のコートが雨や雪に...
-
デパート店員の接客にがっかり...
-
急に遊園地デートが決まって…
-
スーツの上に羽織るのは・・・・
-
コートをクリーニングに出した...
-
皮コート(起毛)の手入れとカ...
-
ダウンコートに穴をあけられた。
-
こっちの店の方が安かった! シ...
-
マウジーのサイズ2は・・・
-
クリーニング店に出したコート...
-
「ダブルツリーByヒルトン」「...
-
カシミアのコートは軽くて暖か...
-
排球の意味とは?
-
金沢にはどんな服装で行けば良...
-
煙草で焼けた跡
-
EAST BOYを大学生・社会人が着...
-
アンゴラのコートは丈夫ですか?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
排球の意味とは?
-
バレー9チーム3コート総当た...
-
アスファルト乳剤1tは何リット...
-
デパート店員の接客にがっかり...
-
10年前の双眼鏡 ラバーコート...
-
洋服の生地で「WS」の表示は?
-
クリーニング店に出したコート...
-
テニス 乱数表
-
テニスの乱数表作成
-
こっちの店の方が安かった! シ...
-
EAST BOYを大学生・社会人が着...
-
踊る大捜査線で、室井管理官着...
-
アンゴラのコートは丈夫ですか?
-
ミルコート仕上げ(玉砂利洗い...
-
至急!!私服★ジャケットの上に...
-
ファッションに詳しい方に質問...
-
バーバリーのトレンチコート ...
-
コートやパーカーのファスナー...
-
マフィアと聞いて一般的にイメ...
-
職場の飲み会(ほぼ同僚と仲の...
おすすめ情報