• ベストアンサー

エクセルで公平にチーム分けする方法を教えて下さい

20人のメンバーを2チームに分け毎週スポーツの練習をしています。毎回公平にチームメンバーが入れ替わる様にエクセルで設定してチーム分けのメンバー表を作りたいのですが、ご存じの方教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • kigoshi
  • ベストアンサー率46% (120/260)
回答No.5

他の方もご指摘されていますように、「公平」の意味がよく分かりませんが 「同じ組み合わせが無いように」という理解で考えてみました。 乱数を使用する方法では、低確率ですが同じ組み合わせが発生し得ます。 ※以下Excel2007以降のバージョンでやって下さい。 メンバー20名の名前を横にA1セル~T1セルへ入力します。 [F11]キーを押して、左上のプロジェクトエクスプローラーからSheet1(Sheet1)を Wクリックします。 右側のエディタエリアに以下のコードを貼り付けます。 Sub sample() rIdx = 1 For i1 = 1 To 20 For i2 = i1 + 1 To 20 For i3 = i2 + 1 To 20 For i4 = i3 + 1 To 20 For i5 = i4 + 1 To 20 For i6 = i5 + 1 To 20 For i7 = i6 + 1 To 20 For i8 = i7 + 1 To 20 For i9 = i8 + 1 To 20 For i10 = i9 + 1 To 20 rIdx = rIdx + 1 Cells(rIdx, i1).Value = "A" Cells(rIdx, i2).Value = "A" Cells(rIdx, i3).Value = "A" Cells(rIdx, i4).Value = "A" Cells(rIdx, i5).Value = "A" Cells(rIdx, i6).Value = "A" Cells(rIdx, i7).Value = "A" Cells(rIdx, i8).Value = "A" Cells(rIdx, i9).Value = "A" Cells(rIdx, i10).Value = "A" For i = 1 To 20 If Cells(rIdx, i).Value <> "A" Then Cells(rIdx, i).Value = "B" Next Next Next Next Next Next Next Next Next Next Next MsgBox ("終了しました") End Sub [F5]を押して実行します。 お使いのPCの能力にもよりますが、終わるまでに数分かかります。 この結果が『20名をA・Bチームに分ける全ての組み合わせ』です。 これを上から順にやれば重複無くチーム分けを行えます。 ただ、実際問題として、全ての組み合わせは18万4756通りあり、全ての 組み合わせを試すには1日1通りならば500年以上かかることになりますが。

fromakiba
質問者

お礼

ご丁寧にありがとうございます。試してみます!

その他の回答 (5)

  • kigoshi
  • ベストアンサー率46% (120/260)
回答No.6

No.5です。 一点訂正します。 誤)[F11]キーを押して 正)[Alt]+[F11]キーを押して

  • don9don9
  • ベストアンサー率47% (299/624)
回答No.4

実力差もそうですが、団体競技ならポジションも考慮する必要がありますよね。 A1:A20に、メンバーの名前が入っているとします。 B1:B20に「この人とこの人は別のチームにしたい」という人をグループ化して、1,2,3,4…などの数字を入れます。 これは、実力が近い人、ポジションが同じ人、またはその両方でもいいです。 例えばサッカーで20人中 ・うまい人が6人いて、この6人は3人ずつに分かれるようにしたい。 ・キーパーができる人が2人いて、この2人は別々のチームになるようにしたい。 という場合、うまい6人に1、キーパーができる2人に2、その他の人は3、という具合です。 そして、C1に =RAND()+B1 D1に =MOD(RANK(C1,C:C),2) と入力して、このC1:D1をC20:D20まで複写します。 これでD列に0が入った人と1が入った人とでチーム分けすればいいです。 上記のようなことを考慮する必要がない(完全ランダムでいい)のであれば、No.2さんの提示された方法でよろしいかと思います。

fromakiba
質問者

お礼

ご丁寧にありがとうございます。試してみます!

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

公平にというのは難しいことですが例えばメンバーの中でAクラス、Bクラス、Cクラスと力量に応じたクラス分けをしておき該当のクラスの中では毎週2チームのどちらに入るかはランダムに決めることにしてはどうでしょう。 例えば次のようにします。 A2セルから下方にAクラスの氏名を、B2セルから下方にはBクラスの氏名を、C2セルから下方にはCクラスの氏名をそれぞれ入力します。なお、それぞれのクラスの人数はできるだけ偶数とします。 そこでD2セルには次の式を入力してF2セルまでオートフィルドラッグコピーしたのちに下方にもオートフィルドラッグコピーします。 =IF(A2="","",RAND()) G1セルには次の式を入力してI2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(ROW(A1)>ROUNDUP(COUNT(D:D)/2,0),"",INDEX(A:A,MATCH(SMALL(D:D,ROW(A1)),D:D,0))) これでD列からI列には1チーム目のメンバーが表示されます。 次に2チーム目のメンバーをJ列からL列に表示させることにしてJ2セルには次の式を入力してL2セルまでオートフィルドラッグコピーしたのちに下方にもオートフィルドラッグします。 =IF(ROW(A1)>ROUNDDOWN(COUNT(D:D)/2,0),"",INDEX(A:A,MATCH(LARGE(D:D,ROW(A1)),D:D,0))) F9キーを押すことで組み合わせの表示が変わります。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

一般の人が考える「公平」は「ランダム」とは全く違いますが,次のようにしてランダムな組み分けをします。 簡単な手順: A列に名前を列記する。A1からA20まで。 B1に =RAND() と記入し,B20までコピー貼り付ける A:B列をB列の昇順で並べ替える A1:A10をチームA,A11からA20をチームBとする。 別の方法:手を動かすのはイヤなヒト向け A1に =RAND() と記入し,A20までコピー貼り付ける B1からB20に名前を列記する D1に「チームA」と記入する D2に =VLOOKUP(LARGE(A:A,ROW(D1)),A:B,2,FALSE) と記入してD11までコピー貼り付ける E1に「チームB」と記入する E2に =VLOOKUP(SMALL(A:A,ROW(E1)),A:B,2,FALSE) と記入してE11までコピー貼り付ける ブックを保存し閉じて開き直す都度,違ったメンバーの組み合わせで表示されます。

fromakiba
質問者

お礼

ご丁寧にありがとうございます。試してみます!

  • papiyonys
  • ベストアンサー率30% (53/174)
回答No.1

公平にという公平の中身が分からないとできません。 通常、力の差があるので強い人が偏ると公平になりませんが、そういうことですか? それとも単純にアトランダムにということですか?

fromakiba
質問者

お礼

言葉足らずですいません。ただ練習をして楽しんでいるだけなので、単純にランダムということです