« [Notes] データベースの移動方法 | トップページ | [Googleデスクトップ] インデックス保存先の変更方法 »

[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

|

« [Notes] データベースの移動方法 | トップページ | [Googleデスクトップ] インデックス保存先の変更方法 »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: [Excel] 繰り返し計算(シミュレーション)をする方法:

« [Notes] データベースの移動方法 | トップページ | [Googleデスクトップ] インデックス保存先の変更方法 »