たかなっちの高校生物 > プログラミング > トーナメントの作成(Excel版)Ver1.3
プログラミング
Excelを中心として作成した理科や趣味関連のマクロプログラムの紹介
Site Menu
トップページ
プログラミングページ


Rerated Page
トーナメントの・・・Ver1.2
おまかせ!トーナメント&リーグ


トーナメントの作成(Excel版)Ver1.3



■ はじめに ■
  • エクセルVBAで作成したトーナメント作成マクロ
  • シード対応
  • 同じ団体同士の対戦を回避する抽選機能を付加(Ver1.3~)
  • 最大32767名までエントリー可能
  • 両面のトーナメント,片面のトーナメント、どちらでも作成可能(条件あり)
  • 印刷範囲を自動で設定
  • HTML形式で出力可能
  • すぐに利用できるきれいなトーナメント
  • 関数は未使用で、トーナメント作成後体裁を整えることが可能


■ サンプル ■
  • 次の図は、作成されるトーナメント例(サンプル)です。
    画像をクリックすると別ウインドウでhtml形式のサンプルが表示されます。




■ ダウンロード ■
  • ダウンロードはVectorサイトから ---> Ver1.4にバージョンアップしたため配布終了


■ 使用方法 ■
  • Ver1.2と重複する部分もあるため詳細は割愛し、前バージョンとの違いについて説明します。
  • トーナメント表を作るには「トーナメント表」シート中の「作成」ボタンを押し、メニューに従えば作成できます。
  • シード抽選について
    「シード抽選」シートに選手名(あるいはチーム名)を記入しておけば、「トーナメント表」を作成後にシード順にシード選手名をトーナメント表に出力することができます。
  • 同じ団体同士の対戦を回避する抽選について
    (今回のバージョンアップで追加した機能です)
    1. 「ランダム抽選」シートに各団体ごとの出場選手を入力して下さい。列単位です。
      とりあえず、200グループ、1グループにつき40人登録できるようにしました。
      別にこれが登録できる限界というわけではありませんが、これくらいあれば十分でしょうか(!?)
      試合前に「ランダム抽選」シートのエントリー表を作っておき、当日棄権者が発生した場合は、該当する選手をBSキーかDELキーで消去して下さい。空欄があっても問題なく作動するようになっています。ただし、この作業はトーナメント表を作成する前に行って下さい。
    2. 次に、「トーナメント表」シートの「作成」ボタンを押して、トーナメントを作って下さい。
      このとき、「ランダム抽選から自動取得」をチェックしてエントリー数を取得して下さい。そしてトーナメント表を作成します。
      ランダム抽選を行う場合、トーナメントを作成する上で条件が二つあります。
       一つ目は、トーナメントを描画する位置を選択できないこと。
       二つ目は、片面のトーナメントしか作れないこと、です。
      以上は私の方で変更できないように設定しましたので、気にしなくても良いでしょう。
    3. 次に、ランダム抽選を行います。
      「ランダム抽選」シート中の黄色いボタンを押せば抽選が実行されます。
      もし、初戦で同じ団体が対戦する場合はマクロ内部で組み直します。
      その際、そのメッセージの後半に「Code:○」という文字が現れますが、それはリトライを何回行ったかという数字です。
      回避が困難で、同じ団体同士での対戦があった場合は、どこが回避できなかったのかも表示されます。
    4. 絶対にはやっていけないこととして、シート名を変えること、列や行を追加することなどが挙げられます。また、上記にも記述しましたが、棄権者の処理について、棄権者を消去してからトーナメント表を作成し、ランダム抽選を行って下さい。
      仮にトーナメント表を作成してから棄権者を消去しても、トーナメント表は棄権者が出る前のエントリー数で作成してあるので、エラーが生じてしまいます。
  • シード2位までの選手を所定のシード位置に配置しながら、残りの選手をランダムに抽選することもできます。
    もちろん同じ団体同士の対戦も回避します。
    1. 「ランダム抽選」シートに選手名(またはチーム名)を入力します。

    2. 例えば『栃木』と『東京』をシードにしたい場合は、シードにしたい選手を次のように「シード抽選」シートに入力します。
      ランダム抽選を行うときにシードを指定できるのは2位までです。

    3. 準備ができたら、「ランダム抽選」シートのランダム抽選開始ボタンを押して下さい。
      すると次のようにトーナメント表が完成します。
      『栃木』と『東京』を所定のシード位置に振り分けつつ、他の選手が抽選(ランダムに振り分け)されています。
      また、同じ団体同士の対戦も回避してあります。


■ 同じ団体同士の対戦を回避する抽選機能について ■
  1. 回避の方法について
    1. エクセルには0~1のいくつもの小数を作る「乱数」という機能がありますので、それらを各選手に割り当て、大きい順に並べ替えたものをトーナメント表に出力します。
    2. しかし、そのままでは同じ団体の選手同士が対戦する可能性があります。
      そこで、抽選の後に、マクロ内部で団体同士の対戦を「回避」する作業を行っています。
      といっても、あまりきちっと回避をやりすぎると抽選の意味がなくなってしまうので、内部で少し並べ替える程度です。
    3. ただ、これだけの作業では回避しきれないことが多いので、回避できなかった場合、再度乱数を割り当て直して回避作業を行います。回避できるまでこの作業を30回繰り返します。
      おそらく30回繰り返して回避できない場合、回避はほとんど無理に近いと思います。
      何回リトライしたかがわかるように、メッセージに「Code:○」という形で(控えめに?)「リトライ」回数を示します。