[Excel] 繰り返し計算(シミュレーション)をする方法
例題として、モンテカルロ法(乱数によるシミュレーション)を考える。
Case1:計算が1行で済む場合
・マクロは不要
・各行で乱数を発生させ、それを用いて計算させる
Case2:計算が1行で済まない場合
・以下のように、マクロを使用する
・作成:ツール→マクロ→マクロで、名称を入力して新規作成
Sub シミュレーション()
ActiveSheet.EnableCalculation = False
For i = 1 To 100
'再計算
ActiveSheet.EnableCalculation = True
ActiveSheet.EnableCalculation = False
'結果(B7-D7)の値を13-15列目の2行以下にコピー
Range(Cells(i + 1, 13), Cells(i + 1, 15)).Value = Range("B7:D7").Value
Next i
'自動再計算を元に戻す
ActiveSheet.EnableCalculation = True
End Sub
・実行:ツール→マクロ→実行
・編集:ツール→マクロ→編集
応用:セルD4の値を0-4.9まで0.1刻みに変化させた場合は、
For i = 1 To 50
'パラメータの値(D4)を0-4.9まで0.1刻みで変化させる
Cells(4, 4).Value = (i - 1) / 10
'再計算
Activesheet.EnableCalculation=True
Activesheet.EnableCalculation=False
'結果(F4)の値を11列目にコピー&ペースト
Cells(i + 1, 11).Value = Cells(4, 6).Value
Next i
参考サイト:http://kaiseki.ori.u-tokyo.ac.jp/~katukawa/hiki/?Excel+%26+VBA+tips
貴重な情報、有り難うございました。
【090828追記】
応用:セルB5の値を-0.5-0.5の範囲で0.1刻みに変化させ、各条件下で乱数シミュレーションする場合
Sub シミュレーション()
ActiveSheet.EnableCalculation = False
For i = 1 To 11
'パラメータの値(B5)を-0.5から0.5まで、0.1刻みで変化させる
Cells(5,2).Value = (i-6)/10
For j = 1 To 100
'再計算
ActiveSheet.EnableCalculation = True
ActiveSheet.EnableCalculation = False
'結果(B7)の値を13+(j-1)列目の2行以下にコピー
Cells(i+1,13+(j-1)).Value = Cells(7,2).Value
Next j
Next i
ActiveSheet.EnableCalculation = True
End Sub
| 固定リンク | 0
「パソコン・インターネット」カテゴリの記事
- [IrfanView] 画像の座標や輝度値を表示させるには?(2025.03.26)
- テレビでYoutube広告をスキップする方法(2024.09.22)
- [動画]字幕の時間調整をする方法(2024.09.14)
- [Windows10] フォルダ表示形式の統一方法(2024.09.09)
- [Word] 図形や画像が印刷できない(2024.08.31)
コメント