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


Page Menu
はじめに
ダウンロード
使用方法
特長
その他


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


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




■ はじめに ■
  • このファイルは、自動でトーナメント表を作成するマクロプログラムです。選手数を入力し、選手名の入っていないトーナメント表を作るという基本的な使用に加え、シード機能、また、初戦で同じ団体同士の対戦を回避する機能を持っており、幅広い利用が可能です。
  • エクセルファイルですので、新たにシートを加えることができます。使い勝手のよいファイルにしてご利用いただいて結構です。

    ▽html出力の例(クリックすると拡大版が表示されます)



■ ダウンロード ■


■ 使用方法 ■
  1. トーナメント表を作りたいとき
  2. ランキング順に対戦を組んだトーナメント表を作りたいとき
  3. ランダムに抽選を行ったトーナメント表を作りたいとき
  4. 1位と2位をシードにして、それ以外をランダムに抽選してトーナメントを作りたいとき
    (下記に項目ごとの詳細が記載されています。クリックするとジャンプします)


  • [1.トーナメントの枠のみを作成するとき]
    まずはファイルを開きましょう!すると次のような画面が出てきます。


  • 「選手名はいいから、とりあえずトーナメント表を作りたい」というときは、左上の黄色い「作成」のボタンを押します。すると次のような画面が出てきます。メッセージ内の「シートのクリア」とは、「トーナメント表」シートのことを指します(↑上図です)。


  • 次に、下図のようなフォームが表示されます。エントリー数を数字で入力し、「トーナメント表を作成」というボタンを押せば、トーナメント表が作成されます。下図のなかでは「列=2」「行=5」となっていますが、これは作成されるトーナメント表の位置を意味しており、トーナメント表の左上がB5のセル、ということです。普段は特に指定する必要はありません。

  • 次に、このようなメッセージが現れます。下図の「エントリー数:20」とエントリー数が表示されますので、正しければ「OK」を押してください。

  • 次のようなメッセージが現れますので、「はい」か「いいえ」を選んでください。なお、両面のトーナメントとは、右と左にトーナメントがあり、中央に決勝が表示されるものです。「いいえ」を選択すると、左側にトーナメントの山があって一番右側に決勝が表示される、「片面のトーナメント」になります。
    ※「ランダム抽選」を利用するときは片面のみのトーナメントしか作成できません。

    あとは、自動的に作成するのを待つだけです。

  • [2.ランキング順に対戦を組んだトーナメント表を作りたいとき]
    ここからは、シード順の入力方法と、自動的に抽選を行ってトーナメント表を作る方法について、詳しく説明します。
  • すべての選手をランキング順にトーナメント表に振りたい場合は、「シード抽選」の下図の枠に選手を詰めて入力してください。黄色いセルにシード番号、白いセルに選手名(またはチーム名)を入力します。下のように番号順に入力する必要はありません。大きい順でもバラバラでも構いませんが、同じ数字があると正常に処理されません(当たり前ですが)。また、ランキングの数字を入力しない場合は、自動的に空欄部に上から順に番号を振っていきます。

  • 上記の入力を終えたら、「トーナメント表」シートに戻って「作成」ボタンを押します。

    上図の画面まできたら、「シード抽選」から自動取得の箇所にチェックを入れ、「トーナメント表を作成」ボタンを押してください。後はメッセージに答えていけば(下図のように)選手名入りのトーナメント表が作成されます。

  • [3.ランダムに抽選を行ったトーナメント表を作りたいとき]
    ランキングは関係なく、抽選による選手名入りのトーナメント表の作り方です。1,2位のシードを指定したいという場合もこちらの手順で進めてください。
    まず、次の図のように「ランダム抽選」のシートに団体(チーム)名と選手名を入力してください。

    入力について、選手名を詰めて記入する必要はありません。空欄があっても問題なく作動します。あらかじめ選手名を入力しておいて、トーナメントを作る直前に、棄権者をDELキーで削除するという方法が使えます。同じチーム内に記入された選手は、初戦での対戦が回避されます。ただし、チーム数が少ない、また、ある特定のチームに所属する選手数が多すぎる場合は、100%回避できるというわけではありませんのでご注意ください。
  • 「トーナメント表」シートに戻り、「作成」ボタンを押して進めていくと下図のようなフォームが現れます。ここで、「ランダム抽選」から自動取得にチェックを入れて、「トーナメント表を作成」を押してください。

  • 下図のようなトーナメントが作られます。なお、抽選を行ってトーナメントを作る場合は両面のトーナメントは作れません。


  • [4.1位と2位をシードにして、それ以外をランダムに抽選してトーナメント表を作りたいとき]
    まず、「ランダム抽選」シートに団体(チーム)名、選手名を記入するのは上記と同じです。このあと、シードを指定するために下図のように「シード抽選」シートに、1位シード、2位シードの選手名を入力します。必ず1位、2位の順番も付けてください。これで準備が完了です。

  • あとは、前述の選手名入りのトーナメント表の作成と同様に操作してください。1位はトーナメントの一番上の位置、2位は一番下の位置です。下図のように、1位に納豆菌、2位にイカが指定した通りに入力されています。
    ※3位以降のシードには対応していません。



■ 特長 ■
  • おおよそトーナメントの作り方は二つに大別できると思います。
     「全くランキングを無視して抽選を行う方法」
     「ランキング順に振り分ける場合」
    どちらもそれぞれメリットとデメリットがありますので、どちらの方法が良いというのは言えません。それぞれの競技の特質や時代背景を勘案して判断するしかありません。シードをいくつか設けて、残りは抽選にするというのは、これらの折衷案と言えると思います。

  • さて、ランキング順に振り分けるときはどうするかというと、下の図のように、より高位のランキング同士が当たりにくいように振り分けます。

    1位と2位は決勝戦でしか当たらないようになっているように、圧倒的に高位が有利なのは言うまでもありません。逆に言えば低位の人にとっては実力伯仲の選手と当たることのない、涙の出るようなトーナメントになると言うわけです。このとき、初戦の小さな山(①のところ)の合計値はすべて「9」になります。ただし、合計値は山の大きさによって変わってきます。16人のトーナメント表では合計値が「17」、32人のトーナメント表では合計値が「33」と増えます。
  • トーナメントを作り、ランキング順位を出場者数に合わせて作るのは面倒な作業です。それを自動化し、負担を軽減するのがこのプログラムの目的です。
  • じゃあ、トーナメントの枠と順位が完成すれば運営の事務作業が終了するかというと、もちろん答えは「ノー」です。やはりトーナメントは選手名が入って完成となるのでしょうし、ときには、同じ団体から出場する選手を1回戦で当たらないようにして欲しいなどの要望もきかなければならないかもしれません。
  • このマクロプログラムは、ランキング順に選手名入りのトーナメント表を自動作成することが可能です。また、初戦で同じ団体の選手同士の対戦を回避する抽選機能を付けています。もちろん、抽選は乱数を使っているので公平に行われます。その他、主な特長を列記します。

  • エクセルVBAで作成したトーナメント作成マクロ
    基本的に関数は使用しませんので、「あるセルを削除してしまったために、シート内に不具合が生じる」ということはありません。このファイルに、自分の大会に必要なシートを追加して使用するという使い方をオススメします。ただし、もともと存在するシート名(「トーナメント表」「シード抽選」「ランダム抽選」)は変更しないでください。

  • 2選手(チーム)までシード対応
    1位、2位をシードにして、その他を自動的に抽選で決めることができます。抽選は、初戦で同じ団体同士が対戦しないようになっています。
  • 最大32,767名のトーナメント表を作成可能
    選手名の入らないトーナメント枠だけの作成なら、最大32,767名分まで作れます。
    「初戦で同じ団体同士の選手の対戦を回避する抽選機能」を利用するときは、予めシートに団体名、選手名を登録しておく必要があり、この方法を使う場合であれば、登録できるチーム数は500、それぞれのチームに登録できる選手は30名となっています。したがって、抽選機能を使用する場合には最大登録数は500チーム×30名=15,000名です。もっと増やすことはできますが、ムダにシートが大きくなると思うのでこれくらいにしました。
  • 両面のトーナメント,片面のトーナメント、どちらでも作成可能(条件あり)

    上の図が両面のトーナメントです。右と左に山があって真ん中に決勝があるという形です。ただし、同じ団体同士の対戦を回避する機能を使用するときは、片面のトーナメントだけです。なお、時折「縦の山のトーナメントにできませんか?」という問い合わせがありますが、エクセルは256列までしかありませんので、罫線で富士山のような縦の山を作ると最大128名のトーナメント表までしか作れません。申し訳ありませんが、エクセルの仕様が変わらない限り、縦の山のトーナメントへの対応は考えておりません。
  • 印刷範囲を自動で設定
    トーナメントを自動作成すると同時に印刷範囲も設定します。あとは「印刷」を押すだけです。
  • HTML形式で出力可能
    大会結果をホームページに載せる方もいるので、HTMLの出力を可能にしました。下図のメッセージが出たら「はい」を押してください。



■ その他 ■
  1. 2010.3.9に「Ver1.4」にバージョンアップしました。団体数を500団体まで拡張して欲しいとの要望を受け、ランダム抽選の枠に変更を加えました。これにより500団体、それぞれの団体には30選手まで登録できるようになりました。(これ以上の団体数にすることも可能ですが、500団体まで対応できれば十分でしょうか)