Excelで複雑な計算をする場合、数値を少しずつ変えて入力し、その計算結果を記録する場合に、これを自動化するマクロです。
ゴールシークは「変化させるセル」の数値を変えて「数式入力セル」の数値が「目標値」になるまで自動的に実行する機能ですが、ここで紹介するマクロはこれに似ています。
「目標値」を探すのではなく、数値入力と計算結果を自動的に別のシート(ログ)に書き出します。
VBA
Sub 計算結果をログに記録()
Const cell_input = "B2" '数値入力のセル(変化させるセル)
Const cell_output = "E5" '計算結果のセル(数式入力セル)
Const input_from = -10 '数値の最小値
Const input_to = 10 '数値の最大値
Const input_step = 0.1 '数値の幅
Const sheet_calc = "計算" '計算式などを設定するシート
Const sheet_log = "ログ" '計算結果を連続してセットするシート
'「ログ」シートをクリア
Sheets(sheet_log).Cells.ClearContents
Sheets(sheet_log).Cells(1, 1) = "input"
Sheets(sheet_log).Cells(1, 2) = "output"
'メイン
gyo = 2
For atai = input_from To input_to Step input_step
Sheets(sheet_calc).Range(cell_input) = atai
kekka = Sheets(sheet_calc).Range(cell_output)
Sheets(sheet_log).Cells(gyo, 1) = atai
Sheets(sheet_log).Cells(gyo, 2) = kekka
gyo = gyo + 1
Next atai
End Sub
Const cell_input = "B2" '数値入力のセル(変化させるセル)
Const cell_output = "E5" '計算結果のセル(数式入力セル)
Const input_from = -10 '数値の最小値
Const input_to = 10 '数値の最大値
Const input_step = 0.1 '数値の幅
Const sheet_calc = "計算" '計算式などを設定するシート
Const sheet_log = "ログ" '計算結果を連続してセットするシート
'「ログ」シートをクリア
Sheets(sheet_log).Cells.ClearContents
Sheets(sheet_log).Cells(1, 1) = "input"
Sheets(sheet_log).Cells(1, 2) = "output"
'メイン
gyo = 2
For atai = input_from To input_to Step input_step
Sheets(sheet_calc).Range(cell_input) = atai
kekka = Sheets(sheet_calc).Range(cell_output)
Sheets(sheet_log).Cells(gyo, 1) = atai
Sheets(sheet_log).Cells(gyo, 2) = kekka
gyo = gyo + 1
Next atai
End Sub
使い方
「計算」と「ログ」というシートを2枚用意します。シート名を変えてください。
「計算」シートには計算式を入力します。シート全体を使っても構いません。ただし「数値入力のセル」と「計算結果のセル」を一つずつ作ってください。
「ログ」シートに結果を書き出しますので、何も入力しないでください。実行時にすべてクリアされます。
VBA(マクロ)の次の行を必要に応じて書き換えてください。
cell_input | 数値入力のセル(変化させるセル) | 「B2」のようにセルを文字列で指定。 |
cell_output | 計算結果のセル(数式入力セル) | 「E5」のようにセルを文字列で指定。 |
input_from | 数値の最小値 | 繰り返し計算させるときに入力する数値の最小値。 |
input_to | 数値の最大値 | 入力する数値の最大値。 |
input_step | 数値の幅 | 入力する数値の幅。0.1ずつ増やすならば「0.1」 |
sheet_calc | 計算式などを設定するシート | |
sheet_log | 計算結果を連続してセットするシート |
マクロ「計算結果をログに記録」を実行します。
コメント