• 締切済み

複数の数字の組み合わせの中から合計がAになる組み合わせを探す方法

例えば、1~10の数字があって、その中から合計が10になる組み合わせを探す、という計算式はExcelで作成することはできますか?(答えは[1+2+3+4][1+2+7][1+3+6][1+4+5][1+9][2+3+5][2+8][3+7][4+6]の9通り) もしくは、複数の組み合わせで計算させて、合計が10になったものを検索するという計算式は可能でしょうか? よろしくお願いします。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 >大きな数字を代入しないでと書いてあるのですが、どれくらいの桁数を入れてしまうとダメでしょうか? というよりも、元々、ご質問の主旨は、数学的な問題だと理解したのですから、それが、どうなるのかは、後は、PCの性能とか、Excelの仕様とかに制約されるということです。たぶん、配列変数のバッファの大きさに関係するものだと思いますが、おやりになってみるのが早いのではありませんか? 数学的な問題としては、この2点の解答で、私は、解決していると思っておりますので、ご質問者が、今、現実に抱えている問題を解決できるのかどうなのかは、こちらからでは分りません。それに、ご質問なさったことは解決しているのではないでしょうか? >また、もしVBA以外の手段をご存知でしたら教えて頂けますか? そういうことは、ご質問の時点で明示してください。もちろん、私は、VBA以外を検討した上で、回答をしています。こちらの書いた内容を良く読んでください。 おそらくは、市販のソルバーを購入されればよいのではないかと思います。社名は、Microsoft のサポートに出ているかと思いますが、ソルバー社といいます。Microsoft社では、以下の会社のソルバーを薦めています。 http://www.solver.com/

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

既に答えがでていますが、私も作ってみました。 (最近似たような問題( http://okwave.jp/kotaeru.php3?qid=1999665 )をやったのでそれの焼き直し) ---------------------------------------------------------------- Private List() As Integer Private Level As Integer Private Count As Integer '組み合わせの総件数 Public Sub partition() 'プログラム起動のきっかけ Dim n As Integer Count = 0 Level = -1 n = 10 ' 合計となる数 Range("A1").Value = "1~" & n & "の数字があって、その中から合計が10になる組み合わせを探す" ReDim List(n) Call part(n) Debug.Print Count & "通り" End Sub Private Sub part(n As Integer) Dim i As Integer Dim first As Integer Dim result As String If n < 1 Then Exit Sub Level = Level + 1 List(Level) = n result = "" For i = 0 To Level result = result & List(i) & "+" Next result = Left(result, Len(result) - 1) Range("A2").Offset(Count).Value = result Count = Count + 1 If Level = 0 Then first = 1 Else first = List(Level - 1) + 1 End If For i = first To n \ 2 List(Level) = i If n - i <> i Then Call part(n - i) End If Next Level = Level - 1 End Sub

msyktnk
質問者

補足

ご回答ありがとうございます! 同じ質問になってしまいますが、VBA以外で他に方法をご存知でしたら教えて頂けますか?

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 ソルバーでやってみようとしたけれど、「解」が見つかりませんでしたので、それは、たぶん、VBAしか無理ではないかと思います。以下で、作ってみました。あまり、大きな数を代入しないでくださいね。 下記の 要素の数:9 というのは、1~9までのこと 合計の目的の数:10 というのは、合計の数値のこと 後は、いじらなくてよいと思います。 '<標準モジュール> '----------------------------------------------------------- Private Const N As Integer = 9 '要素の数 Private Const TARGETNUM As Integer = 10 '合計の目的の数 Private k As Integer '取り出される要素数 Private buf() As Integer '出力の際のバッファ Private ar() As Integer '要素を格納する配列 Private i As Integer Private j As Integer Private m As Long Sub Init()   Dim flg() As Boolean   ReDim ar(1 To N)   ReDim flg(1 To N)   Range("A1").CurrentRegion.ClearContents   For k = 2 To Int(N / 2)     ReDim buf(1 To k)     j = 0: m = 0      For i = 1 To N       ar(i) = i     Next i     Comb 1, flg(), 0   Next k End Sub Private Function Comb(Lb As Integer, flg() As Boolean, Used As Integer) If (N - Lb + 1 + Used < k) Then Exit Function   If (Used = k) Then    For i = Lb To N      flg(i) = False    Next    j = 0    For i = 1 To N      If flg(i) Then       buf(j + 1) = ar(i)       j = j + 1      End If    Next    Call WorkOut(buf())    m = m + 1    Exit Function   End If   flg(Lb) = True   Comb Lb + 1, flg(), Used + 1   flg(Lb) = False   Comb Lb + 1, flg(), Used End Function Private Sub WorkOut(BaseArray() As Integer) Dim rw As Long   Application.ScreenUpdating = False   rw = Range("A65536").End(xlUp).Offset(1).Row   If WorksheetFunction.sum(BaseArray()) = TARGETNUM Then     Cells(rw, 1).Resize(, k).Value = BaseArray()   End If   Application.ScreenUpdating = False End Sub

msyktnk
質問者

補足

ご回答ありがとうございます! ところで、大きな数字を代入しないでと書いてあるのですが、どれくらいの桁数を入れてしまうとダメでしょうか? また、もしVBA以外の手段をご存知でしたら教えて頂けますか?

関連するQ&A

  • エクセル「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」…のような形です。 ※実は子どもの名付けで、画数の組み合わせを出そうと思っています。 わかりづらい点があるかとは存じますが、お力添え何卒よろしくお願い致します。

  • 10個の数字を5個の組み合わせにして

    ミニロトなのですが、10個の数字を固定して、全通り買うには何通りありますか? (計算方法もよろしければお願いします) ロト6もこれらのように、複数数字の中から、全組み合わせを買いたいのですが、計算方法と、答え教えて下さい。 公式と意味が分かれば全てわかるのですが、歳老いて勉強不足で計算方法忘れてしまいました。

  • 4桁の数字で、合計が24になる組合せが簡単にわかる方法ありませんか?

    4桁の数字で、合計が24になる組合せが簡単にわかる方法ありませんか? 何通りあるかではなく、何通りの中身を知りたいです。

  • 複数の数字の中からどれかを足して合計を出す方法

    いつもお世話になっております。 過去にも同様の質問がありましたが、ナップザック問題について教えていただきたく思います。 エクセルのA列に50個程の数値(千円単位~1千万円単位)が入っています。 その中のどれかを足し合わせて、特定の数字を探したいのです。 (求めたい数字21,069,182) (例) 10 5  12 2 なら、15になるのは10と5の組み合わせで、10と5を求めるような感じです。 過去の質問を読み、エクセルのVBAをコピーしてやったりしましたが、フリーズしてしまったり、オーバフローなどになってしまいます。 50個と数字が多いのが問題なのでしょうか・・・ 何か良い方法がございましたら、ご教授いただきたく思います。 よろしくお願いします。

  • たくさんある数字の中から、どれを足せばその数字になるかわかる方法ってありますか?

    タイトルどおりなのですが、数字を自動検索するような方法ってありますか? 文章ではわかりにくいので、例を出しますと 13 8 2 の数字の中で、何個か数字を足して10という数字を作らなければいけない。 この場合、8と2を使うと10になります。 その8と2がわかるようなソフトとか、計算方法とか、エクセルの使い方とかわかりませんでしょうか? 数字の数が半端ではないので、いちいち手計算していると時間がかかってしまうのです。 よろしくお願いします。

  • エクセルでの組み合わせ出力方法(計算含む)

    エクセルの初心者です。 エクセルで作成した数字の表を利用して、その表の中の任意の数字の組み合わせの合計が、ある数字ぴったりの組み合わせを探し出すにはどうすればいいでしょうか?表の数字は50くらいあります。

  • 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の関数では実現できますでしょうか? また上記のような組み合わせのパタンの総数を求める公式はありますか? 初歩的な高等数学で恐縮です。

  • エクセルの合計値を導く数字の検索

    エクセルで、30個数字があるのですが そのうちのどれかを足した数字が、10500なんですが どの数字をたすと10500になるのかが分からないです。 30個の数字からいろんな組み合わせを想定して合計を10500に導くマクロか関数を教えていただけないでしょうか? アウトプットは、どの数字を組み合わせに選んだかがわかるようにしたいです。お願いします。

  • 合計値が同じ組み合わせ

    下記の様な事ってEXCELの関数を使って、出力は可能でしょうか? 可能でしたら是非とも教えてください。 例)B列の1行目から10行目にそれぞれ数字が入力されていて、そこから4つのセルを抜き出し、合計値が30となる組み合せ全てを抽出する。

  • 数字の組み合わせについて

    0~9の数字を4個、AからZの数字を2個並べたとします。前者が前で後者が後ろです。この場合の組み合わせは何通りあるのでしょうか?計算方法も示してくださると幸いです 組み合わせ例 1147AF 9987ZY 宜しくお願いします。

専門家に質問してみよう