こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

EXCEL VBAで組合せを作るには

EXCEL VBAで組合せを作る方法を考えているのですが、なかなか思い付かず質問させて頂いています。

例)
1 2 3 4 5 … nという数字があり、そこから抜き取り組合せを作る。

・2個ずつの組合せ
1と2
1と3
1と4
という感じで組合わせて行くが、2と1というような逆のパターンは除外する。

・3個ずつの組合せ、4個ずつの組合せ…と最終n-1個(n個全てを抜取る組合せは1パターンしかないので、あえて作らなくてもよいのではと思っています)まで組合せを作って行く。

という内容です。


抜き取りたい数字の個数が、いつも決まった数ではなく、それに対応したものが考えきれなくてつまづきました。

どうかよろしくお願いいたします。

投稿日時 - 2009-03-11 11:16:17

QNo.4787087

すぐに回答ほしいです

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

「1 2 3 4 5 … n」のように、もとのデータに重複がなく、さらに選ぶものも重複はないものとする。  ・・ということでいいんですよね?

m個の組を選択するとすれば、選択の組み合わせは後方のデータの方が必ず後に並べるというルールにしておいて、・・・
(考え方だけで良いので実データの大小は関係ありません)

0)最初は自動的に (1 2 3 … m) からスタート
1)まず、m番目のデータをm~nまで順番に変えてゆく
2)次に、(m-1)番目のデータを繰り上げて、mにし、1)を繰り返す。
 (m番目は、m+1~nまで順に変化)
        ・・・・・・
3)同様に繰り返して、全体が(n-m+1 n-m+2 … n)になって終わり

という考え方ではいかがでしょうか?
(組み合わせの個数だけなら、すぐに求められそうだけど)

投稿日時 - 2009-03-11 12:27:26

お礼

ありがとうございます。

実際にできるかどうか、私の技量ではどうなるか分かりませんが、ぜひ参考にさせていただきます。

投稿日時 - 2009-03-20 13:17:45

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

n個の数字で、nがそんなに大きくなければ
nビットの2進数と対応付けて取り出すことが出来ます。
つまり
・Mを0から2^nまでカウントさせる。
・各Mに対して、どのビットが1になっているかチェックする。
(M と[1,2,4,8,16,32,64,128・・・]のANDを取ることにより各ビットの状態が取得できる)
・1になっているビットに対応する数字を採用する。
(もし組合せの個数を指定したければ1のビットを数える)
というのでどうでしょうか?

投稿日時 - 2009-03-11 21:28:38

お礼

ありがとうございます。

教えていただいた内容を参考に、きちんと仕組みを考え直したいと思います。

投稿日時 - 2009-03-20 13:18:57

あなたにオススメの質問