- 締切済み
1組4人のチームを名簿リストから重複せず作成
エクセル初心者です。 1組4人を自動化して作成する為にネットでいろいろ探してみて https://prau-pc.jp/excel/grouping/ このサイトを参考にして作成しているのですが 毎月2回~3回、年間通して作成を行っており 次回の作成を行う時に今までに組合せされたことのない人同士を優先して組合してあげたいのですがそこまで自動化可能でしょうか。 名簿規模はMAX50人です。 出来れば関数のみ希望です。 宜しくお願い致します。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
その後WEB記事を覗いたり(「組み合わせ 列挙」のような用語で照会するとよい)、考えたりで、よさそうな記事(比較的プログラム行数の少ないもの)に出会った。 VBAの初歩的な経験が必要だが。 また、このロジックを理解すのも、文系や、プログラム未経験者には、むつかしいだろうが。 http//arigirisu2011.sakura.ne.jp/public_html/Combi.html C言語のものをVBAに翻案した。 ーーーー 標準モジュールに Sub test04() '12個から4つ取り出しの場合 => i,j,k,mのように、変数を4文字使う ーーー r= 1 'シートの第1行目から書き出し '---- For i = 1 To 9 '12-3=9 For j = i + 1 To 10 '12-2=10 For K = j + 1 To 11 '12-1=11 For l = K + 1 To 12 '12-0=12 Cells(r, "A") = i & " " & j & " " & K & " " & l '書き出し r = r + 1 '次行へ書き出し準備 Next l Next K Next j Next i End Sub この上記パターンを類推して、上記の10個の中の10と、4個を取り出す4を修正し、For Nextの組=対の行を増減(追加や消去)して、実行すると、シートA列に数字で組み合わせの数字が出る。 その後人間がメンバーの名前と数字を対応させて、解釈・対応させ、実際の名前の組み合わせ名簿を作れる。理由があって、数字でやる方がプログラムが簡単であるのでそうしている。 上記の場合に、出来上がる行数は、例えば エクセルの関数、組み合わせ数の関数 =COMBIN(12,4)の495個です。人数が増えると、プログラム処理ステップ数、該当数が膨大になるので注意。 ーー >今までに組合せされたことのない人同士を優先して組合してあげたい に役立つのではないかな。
- msMike
- ベストアンサー率20% (364/1805)
- imogasi
- ベストアンサー率27% (4737/17069)
私は力なく、本件の回答はできません。しかし長い間こういう質問を「眺めて」きて下記を言いたい。 こんなのを関数でやろうということを言いだすことが、「エクセルの関数の限界」や「組み合わせ理論の難しさ」を知らない人の言うこと、だと思う。 エクセル関数は (1)組み合わせの結果の場合の「数」は簡単な例なら、関数式で出る。 (2)しかし具体的な例を(名前記号などとしてでも)列挙せよ、となると4以上の数を超えると、複雑で手に負えない。 その他に、 (3)メンバーが年間に月によって増減する (4)組合せされたことのない人同士を優先して組合して など、頭の中でイメージを空想するのは一瞬で出来るのだが、どんなロジック・アルゴリズムでするのか、数学的思考に得意なひとでないと、不可能だと思う。 (5)対象人数が50名というのも、組み合わせなどを考える場合は、多すぎる、かもしれない。すぐ膨大な数になるから。 それを教えてもらっても、プログラムが必要で、>出来れば関数のみ希望、なんて言っている人には無理だと思う。 ーーー 数学的思考に得意なひとが、この質問を見てくれるとよいが、日ごろの様子では、見ていないのではないか。 小生も解答がでるのが楽しみだ。しかしその回答を理解できるかな、とも思う。 ーー 数学の質問カテゴリに質問を出すという手もある(むしろ、そうすべきと思う)。 大切なのは、エクセル関数の知識でなく、数学的思考でどう解決するか、であることを気づくことだ。
- msMike
- ベストアンサー率20% (364/1805)
》 名簿規模はMAX50人で 》 1組4人を 》 名簿リストから 》 自動化して作成する それを作成するのは何組ですか?
補足
補足 作成組数は平均して8~9組程になります。 MAX13組です。