2017-01-17 54 views
2

我對編程頗爲陌生,我試圖確定下面的仿真在VBA中是否可行:蒙特卡羅仿真,涉及36個時間段,每個週期20個仿真變量,以及最多每期5000次模擬。然後對每個時期的模擬結果進行彙總,以創建36個分佈(每個時期一個分佈)。這似乎是一個3d數組,需要存儲變量,需要循環...等。我擔心計算時間。似乎這可能對vba來說太多了,所以我想獲得一些反饋。提前致謝。vba,模擬和數組

+3

是的,在VBA中是可行的,去做吧。 –

回答

2

是的,這是非常可行的。我一直都在做這樣的事情。

15-20年前我第一次開始使用VBA時,性能常常是一個問題,對於某些事情它仍然是一個問題。但受Moore's law魔術,VBA我2+歲的筆記本電腦編譯的C 20年來的速度相匹配前:

Sub quick() 
    Dim i As Long, sum As Long 
    Dim start As Double, elapsed As Double 
    start = Timer 
    For i = 1 To 100000000 
     sum = sum + 1 
    Next i 
    elapsed = Timer - start 
    Debug.Print "Sum of " & sum & " computed in " & elapsed & " seconds" 
End Sub 

輸出:

Sum of 100000000 computed in 0.765625 seconds 

億穿過一個循環,在不到一秒。即使模擬需要數十億次的浮點運算,它也可能在不到一分鐘的時間內運行。除非你的5000個獨立模擬步驟中的每一個都需要數以億計的計算,否則你應該沒問題。

所以 - 開始編碼。如果您遇到問題,請發表其他問題。

一句警告:VBA很快。 Excel本身很快。連接兩者的橋樑(Excel對象模型)很慢。爲了獲得可接受的速度,應儘量減少工作表和VBA之間的數據傳輸。一個常見的初學者錯誤是將電子表格本身用作數據結構。將仿真本身寫入純VBA中,與電子表格進行交互,主要侷限於在仿真開始時讀取初始值,並在最後將輸出寫入電子表格。