- 締切済み
Excel関数での計算が可能でしょうか
Excelの関数でこんなことができるか教えてください。 列に1から10までの整数が有ります。この中から足して12になるパターンを抽出する。 条件-1つのパターンに対し、同一整数は1度しか使えません。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
選択肢が1から10の整数に限られるのであれば、 組み合わせは2^10=1024通りしかありませんから、 すべてを書き出して虱潰しでチェックしてもなんとかなります。 0.1行目は見出し行として空けておきます。 1.A2セルを =IF(ROW()-1>2^10,"",IF(MOD((ROW()-1),2^COLUMN())/2^(COLUMN()-1)>=1,COLUMN(),"")) として、J2セルまで右方にフィル 2.K2セルを =SUM(A2:J2) とする 3.A2:K2セルを、数字が返らなくなるまで下方にフィル 4.オートフィルタでK列が12であるものを抽出 ---------------------------------------------------------------- ちなみに結果は、 (10,2) (9,3) (9,2,1) (8,4) (8,3,1) (7,5) (7,4,1) (7,3,2) (6,5,1) (6,4,2) (6,3,2,1) (5,4,3) (5,4,2,1) の13通りです。
- kigoshi
- ベストアンサー率46% (120/260)
「関数で」という条件であれば(可能かも知れませんが)かなり困難かと思います。 ご質問の条件からはずれますが、VBAを使用した例を書きます。 手順 1)A1セル~A10セルにそれぞれ1から10までを入力。 2)シートタブを右クリック、「コードの表示」をクリック。 3)画面右側のエディタエリアに下記コードを貼り付け。 4)[F5]キーを押してマクロを実行。 これでB列に加算パターンが全て表示されるはずです。 ご参考になれば。 Const rTOTAL As Integer = 12 Sub sumPattern() Dim nMax, rIdx, rIdx2, sTotal As Integer Dim nNum As String Dim nPat, nPatC As Long nMax = Range("A65536").End(xlUp).Row For nPat = 1 To 2 ^ nMax - 1 sTotal = 0 nNum = "" nPatC = nPat For rIdx = 1 To nMax If nPatC Mod 2 = 1 Then sTotal = sTotal + Cells(rIdx, 1).Value If sTotal > rTOTAL Then Exit For nNum = nNum & CStr(Cells(rIdx, 1).Value) & "+" End If nPatC = Int(nPatC / 2) Next If sTotal = rTOTAL Then rIdx2 = rIdx2 + 1 Cells(rIdx2, 2).Value = Left(nNum, Len(nNum) - 1) & "=" & CStr(rTOTAL) End If Next End Sub
- suekun
- ベストアンサー率25% (369/1454)
ソルバーの使い方の一例を見つけましたので提示しておきます。 http://hpcgi1.nifty.com/kenzo30/a_cbbs/cbbs.cgi?mode=al2&namber=3978&no=0&P=R&KLOG=21
お礼
ありがとうございます 私の質問の仕方が、不十分で申し訳ありません。 試してみたのですが、この方法での、すべてのパターンを出す方法がわかりません 例えば:1+2+3+6=12 2+3+7=12 のような、トータルが12になる為には、何パターンの式が成り立つか を出すことが可能でしょうか?
- suekun
- ベストアンサー率25% (369/1454)
関数でも長く組み立てれば(作業列等も含めて)可能な気がしますが 用意されている機能の一つであるソルバーで対応出来ると思います。 ソルバーでぐぐって見て下さい。
お礼
ご回答ありがとうございます 今までソルバーを使用したことが無かったので、思いつきもしませんでした。 調べながら、試してみます。 まだ他の方法もあるようでしたら 教えていただきたくお願いします。
お礼
やはり、関数では難しいのですね ありがとうございました。