前提・実現したいこと
よろしくお願い致します。
<質問>
I2~I22にランダムに値(数字)が入力されています。
I J K L M N O P
2 1
3 3
4 5
5 9 3+6 4+5
6 12
・
・
・
22 35
例えば「I5」は9ですが、I2~I22までの値を足して「9」となる
組み合わせを「J22、K22、L22・・・」に表示させたいです。(I5列(3+6、4+5)のように)
かつ、表の上に希望の数字を入れるボックスと開始ボタンを付けたいです。
上記のようにすべての組み合わせを表示させたいのですが、
ソルバーではできず、自分なりにVBAを組んでみたのですが
初心者ということもあり、どの構文をどのようにして範囲をどこに
設定してよいかなどがわかりませんでした。
また、ボタンにVBAを登録はできるのですが、希望の数字を入力する
ボックスとそこに入力された数字をVBAに反映する方法も調べながら
やっては見たのですがうまく生きんせんでした。
丸投げのような形になってしまい、恐縮なのですがご存知の方が
いらっしゃいましたら、ご教授をお願い致します。
よろしくお願い致します。
試したこと
以前に見たことがある以下のものを使用してみたのですが、希望の結果は出ませんでした。
*A1~A20に整数を入れ、B1~B20に足した結果を欲しい数字を入れて試しました
<試したもの>
Const MAX = 19
Dim idx(MAX) As Integer
Dim nums(1, MAX) As Integer
Sub test()
Dim y As Integer Dim r As Integer Dim total As Integer ' インデックスとデータを初期化 For y = 0 To MAX idx(y) = 0 nums(0, y) = Cells(y + 1, 1).Value nums(1, y) = 0 Next ' 全パターン組み合わせ出力 r = 1 Do ' 合計値を計算 total = 0 For y = 0 To MAX total = total + nums(idx(y), y) Next ' 合計値が一致した場合、結果を出力 If total = Cells(1, 2).Value Then Call OutResult(r) r = r + 1 End If ' 次の組み合わせ生成 If SetNext(MAX) Then Exit Do Loop
End Sub
Function SetNext(pos As Integer) As Boolean
SetNext = True If pos < 0 Then Exit Function idx(pos) = idx(pos) + 1 If idx(pos) > 1 Then idx(pos) = 0 If pos <> 0 Then SetNext = SetNext(pos - 1) Exit Function Else SetNext = True Exit Function End If End If SetNext = False
End Function
Sub OutResult(r As Integer)
Dim y As Integer Dim result As String result = "'" For y = 0 To 19 If idx(y) = 0 Then If result <> "'" Then result = result & "+" End If result = result & nums(0, y) End If Next Cells(r, 3).Value = result
End Sub
補足情報(FW/ツールのバージョンなど)
Windowa10
Excel2010
上記を使用しています。
どうぞよろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。