• ベストアンサー

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パターンしかないので、あえて作らなくてもよいのではと思っています)まで組合せを作って行く。 という内容です。 抜き取りたい数字の個数が、いつも決まった数ではなく、それに対応したものが考えきれなくてつまづきました。 どうかよろしくお願いいたします。

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

「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)になって終わり という考え方ではいかがでしょうか? (組み合わせの個数だけなら、すぐに求められそうだけど)

WANKO_P
質問者

お礼

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

その他の回答 (1)

回答No.2

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

WANKO_P
質問者

お礼

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

関連するQ&A

  • vba  組み合わせパターン表示

    1,2,3,--,n-1,nからm個とる組み合わせのパターンを セル(1,1)から(nCm、nCm)に表示させる処理をVBAで記述 したいのですが、どうすればいいのでしょうか。 よろしくお願いします。

  • ナンバーズ4の各桁の合計数がNのときの組み合わせの数

    ナンバーズ4についての質問です。 ナンバーズ4の各桁を合計した値をNとします(0≦N≦36、Nは自然数)  ⇒ナンバーズ4は0000~9999の中から数字を選択するため 各桁の合計値がNのときにナンバーズ4の組み合わせは 何パターンあるのか求める方法を教えてください。 例)N=0のときは0000の1パターン   N=1のときは0001 0010 0100 1000の4パターン これを上記のようなアナログなやり方ではなく 数式で求めたいのです。 よろしくお願いいたします。

  • 上限のある重複組合わせ(?)

    以下の42個の数字から、n個 抜き取った組合わせは何通りかという問題がありまして(自作)。 1, 5, 6, 6, 8, 8,10,13,13,14, 14,15,17,18,18,19,21,21,22,25, 26,27,28,28,30,30,30,30,30,31, 31,34,35,35,36,39,40,40,41,41, 41,42 総当りで出力し、カウントをするプログラムはできまして(n=0個から) 1 26 337 2902 18667 95612 405931 1468386 4616880 12809820 31736232 70875642 143789049 ・・・ という感じで答えはわかっているのですが、時間もかかるし(3sぐらい)実際の組合わせは知る必要はないので もっと数学的に計算でできないのか、考えているんですけど解りません。 問題を簡単にして、↓のように考えたのですが、やっぱり無駄に計算量が多いような気がします。 1,1,1,1,2,2,2,3,3,4 の10個の内 7個 4種類の数字の重複組合わせをベースとし 4 H 7 -> 4+7-1 C 7 -> 10 C 7 -> 120 ・4 は、1つしかないので、2つ以上を含むパターンを除外する 4-4 確定 あと 5つを 4 H 5 -> 56 ・3 は、2つしかないので、3つ以上含むパターンを除外する。 3-3-3 確定 あと4つを 4 H 4 -> 35 ・2 は、 3つしかないので、4つ以上含むパターンを除外する。 2-2-2-2 確定 あと3つを 4 H 3 -> 20 ・1 は、 4つしかないので、5つ以上含むパターンを除外する。 1-1-1-1-1 確定 あと2つを 4 H 2 -> 10 120-56-35-20-10 = -1 ただし、以下は重複しているので加算する。 4-4-3-3-3-*-* 10 4-4-2-2-2-2-* 4 3-3-3-2-2-2-2 1 4-4-1-1-1-1-1 1 -1 +10+4+1+1 -> 15 プログラムはすこしわかるのですが、数学はわかりません。 すぱっと数式ででるやりかたがあれば教えてください。

  • 組み合わせ

    1~10の数字の組み合わせで  ・2個ずつ、5組を1パターンとして9パターン作る  ・1パターンの中に1~10すべての数字を使う(同じ数字を使わない)  ・9パターンの中に同じ組み合わせのものがないようにする  ・例えば1-6と6-1は同じ組み合わせと考える 組み合わせとして45通りできるのはわかるのですが、 そこから9パターンが作れなくて。 (家族で頑張ったのですが7パターンまで・・・・) 文章にするとわかりにくいと思いますがよろしくお願いします。

  • この問題での順列組み合わせの使い方は?

    n進数m桁の数字列を考える。 全部でn^m通りのパターンがある。 このうち、一回も現れない数字のあるパターンQは何通りか。 自分で立てた問題です(というか興味があるので知りたい) けど、どうしても分かりません。 解き方を教えて下さい。 以下は自分の考えた履歴です --- ある数字に着目して、それが選ばれないパターンは(n-1)^m通り これを数字の種類だけn倍すると、同じパターンを重複して数えてしまう気がする。 どうやって除去するか? --- 【n>mのとき】 m=1のとき、Q=n-1通り m=2のとき、 一回目と二回目で数字が同じパターンはn通り 異なるパターンはn*(n-1)通り ・・・ここから先が分からない

  • エクセル「3つの数字の合計がある数字になる組み合わせ」を調べたい。

    こんにちは。 エクセルで、以下のような問題を解くことはできますでしょうか? 基本的な関数しかできず、自分で調べたところ。ソルバーやVBAを使えばできるのかもしれないとは思ったのですが、なかなか良い類似例を見つけられず、苦戦しています。 <問題> 「3」「5」「6」「8」…といったランダムな数字が合計になる3つの数字のすべての組み合わせを知りたいです。 たとえば、 「3」なら答えは「1+1+1」 「5」なら答えは「2+1+1」「1+2+1」「1+1+2」 「6」なら答え「4+1+1」「1+4+1」「1+1+4」「3+2+1」「2+3+1」「1+2+3」「3+2+1」…のような形です。 ※実は子どもの名付けで、画数の組み合わせを出そうと思っています。 わかりづらい点があるかとは存じますが、お力添え何卒よろしくお願い致します。

  • excelで重複組合せの計算

    重複組合わせの計算: 製品の種類(n) 443           製品の種類(n) 212 出荷数(r) 3530           出荷数(r) 1646 n+r-1 3972           n+r-1 1857 重複組合せn+r-1Cr #NUM!     重複組合せn+r-1Cr 9.5806E+283          ”=COMBIN(B4,B3)      ”=COMBIN(E4,E3) 以上、同じexcelのCOMBIN関数で計算しましたが、一つは普通に計算できましたが、なんでか一つは#NUM!を返してきました。値が大きすぎのせいですか?どんな方法で解決できるのでしょうか?

  • Excelで、数字の組み合わせの合計が一定数になるパターンの抽出

    Excelで、数字の組み合わせの合計が一定数になるパターンの抽出 たとえば、つぎの配列があるとします。 A(5){10,20,30,40,50}要素数が5つ1..5、{}は内容 このなかで二つ以上の組み合わせで和が60になる組み合わせを出したいとします 答えは パタン1:1,2,3  /* 10+20+30 */ パタン2:1,5 /* 10+50 */ パタン3:2,4 /* 20+40 */ 同じような処理をExcelの関数では実現できますでしょうか? また上記のような組み合わせのパタンの総数を求める公式はありますか? 初歩的な高等数学で恐縮です。

  • ナンバーズ3、4の重複しないシングルの組み合わせ

    どなたかご存じでしたら回答をお願いします。 数字選択式宝くじのナンバーズ4の組み合わせは、 0000~9999までの10000通りあります。 この中で、全ての数字が異なる組み合わせは 5040通り(10×9×8×7)あると思います。 これを、「重複しないシングル組み合わせ」は 210通り(5040÷(4×3×2×1))になるかと思います。 この210通りの全ての組み合わせをエクセルで作りたいのですが、 作り方が分かりません。 同様に、ナンバーズ3については、000~999までの1000通りの 組み合わせの中から、全ての数字が異なる組み合わせは 720通り(10×9×8)あると思います。 これを、「重複しないシングル組み合わせ」は 120通り(720÷(3×2×1))の全て組み合わせをエクセルで作りたいのですが、 作り方が分かりません。 120 通りと240通りなのでエクセル又はエクセルVBAでの作り方を教えてください。 よろしくお願いします。

  • Excelでデータ全通り組み合わせ出力方法

    Excelでデータ全通り組み合わせ出力方法について教えて頂けますと助かります。 セルA~Eに、数がまちまちのアイテム名が入っています。 (セルA~Eというのは例で、変則的に全てのアイテム数は増減します。) 全ての組合せをセルG~Kに各々書き出してくれる方法はあるでしょうか? (イメージ添付あり) できればセルに入力すれば自動的に組合せが追加されていくのが理想です。 Excel2010を使用しており、VBAは初心者です。 どなたかご存じでしたら、ぜひお教え下さい。 よろしくお願いします。