アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。
エクセルで、以下のような問題を解くことはできますでしょうか?
基本的な関数しかできず、自分で調べたところ。ソルバーや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」…のような形です。

※実は子どもの名付けで、画数の組み合わせを出そうと思っています。

わかりづらい点があるかとは存じますが、お力添え何卒よろしくお願い致します。

A 回答 (2件)

A1に合計[下の例では10]を入れておくとして



●関数利用

   A B C D
1 10 1 1 8
2   1 2 7
3   1 3 6
4   1 4 5
5   1 5 4
6   1 6 3
7   1 7 2
8   1 8 1
9   2 1 7
36   8 1 1

B1,C1に1
D1
=A$1-SUM(B1:C1)
下方向・↓
B2
=B1+(D1=1)
下方向・↓
C2
=IF(D1=1,1,C1+1)
下方向・↓

●VBA利用
Sub test()
Dim a As Long
Dim b As Long
Dim c As Long
Dim mySum As Long
Dim WsfC As Long
Dim myRow As Long
Dim newSum As Long
Dim myVar() As Long
Dim myRng As Range
 mySum = Range("A1").Value '合計
 newSum = mySum - 3 '合計から3を引く
 WsfC = Application.WorksheetFunction.Combin(mySum - 1, 2)
 ReDim myVar(1 To WsfC, 1 To 3)
 Set myRng = Range("B1:D" & WsfC)
 Application.ScreenUpdating = False
 For a = 0 To newSum
  For b = 0 To newSum - a
   c = newSum - a - b
   myRow = myRow + 1
   myVar(myRow, 1) = a + 1
   myVar(myRow, 2) = b + 1
   myVar(myRow, 3) = c + 1
  Next b
 Next a
 myRng.Value = myVar
 Application.ScreenUpdating = True
End Sub
    • good
    • 0
この回答へのお礼

早速のお返事ありがとうございます!
VBAは不慣れなので、教えて下さった関数の方で計算してみようと思います。
基本的な算数?数学?の知識があれば、どうにかなったのかもしれないですね…でも、算数も数学も苦手なので助かりました。

ところで、お手数でなければ、「=B1+(D1=1)」の“D1=1”の部分意味を教えて頂けませんでしょうか?
この形の計算式を初めてみたので、後学のためにもお願いできましたら幸いでございます。
宜しくお願い致します。

お礼日時:2010/03/03 18:50

それでしたら1.か2.の式でやってください。

同じことです。
1.が一番わかりやすいと思います。

1.右端のひとつ上D1が1になったときが変わり目、それ以外は継続
B2
=IF(D1=1,B1+1,B1)

2.あれ?B1は前に出せる。
B2
=B1+IF(D1=1,1,0)・・・★



以下、もしも興味があれば読んでください。

3.★は次のように言い換えられる。
B2
(D1=1)がTRUE→=B1+1
B2
(D1=1)がFALSE→=B1+0

4.確かExcelの関数では、四則演算の中では
TRUEは1,FALSEは0と評価されるんだった..つまり
B2
(D1=1)がTRUE→=B1+(D1=1)
B2
(D1=1)がFALSE→=B1+(D1=1)

5.おお、まとめられる。
B2
=B1+(D1=1)
    • good
    • 0
この回答へのお礼

再び速いご回答ありがとうございます。
すごく勉強になりました!
4の部分は、基本的なエクセル関数のルールをもう少し自分のものにしないとすんなり理解できないなぁ…というレベルではありますが、どうにか理解できました。
エクセルは数学が苦手な文系の強い味方だと思っていましたが、数学的思考で使いこなすともっと便利なのだということを実感しました。
もっと頑張って勉強いたします。
子どもの名付け用リストもどうにか完成しました。
重ねてお礼申し上げます。

お礼日時:2010/03/04 18:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!