0
我想在VBA中使用數組創建引導程序,但它不工作。我有兩股,在列B和C的數據的數據集:Bootstrap,Arrays,Large dataset,vba
16/08/2016 79.84 70.87
15/08/2016 80.26 71.79
12/08/2016 80.22 71.7
11/08/2016 80.56 71.98
10/08/2016 80.55 71.21
09/08/2016 81.5 73.05
08/08/2016 81.6 72.25
05/11/1990 17.5625 6.4011
02/11/1990 17.0938 6.4358
01/11/1990 17 6.5137
31/10/1990 16.8438 6.583
30/10/1990 17.3438 6.4444
29/10/1990 17.7813 6.3232
我需要選擇從列C中隨機萬次,取單元格D1的平均和顯示。接下來,生成隨機D2 10000次和顯示器等類似的E1,E2,...,恩,但基於列的數據C.
因爲數據集是大與兩個或更多的股票和方法需要很多次運行,每次到每個單元格的平均打印時間很長,需要很長時間。所以我需要使用數組,我沒有得到它。 我可以做到「手動」,但我相信有更好的方法。
下面的代碼需要很長的時間,我的機器上運行,因爲它每一次打印到電子表格。我知道我在運行時將模擬值存儲在simval()
數組中,但在Redim時它會被刪除。理想情況下,我想將數據提取到數組中,模擬新的分佈並在原始數據旁邊打印結果。
Sub bstrap()
Dim miRange As Range
Dim avgsimvals() As Double, simval() As Double
Dim start As Double, secs As Double
start = Timer
r = Range("A1").CurrentRegion.Rows.Count
c = 4
Set miRange = Range(Cells(1, 2), Cells(r, 2))
For j = 1 To 100 '100 runs takes over 90 secs, approx 2.5 hrs for 10,000
ReDim simval(1 To r)
For i = 1 To r
simval(i) = WorksheetFunction.Index(miRange, r * Rnd() + 1)
Cells(i, c).Value = simval(i)
Next i
c = c + 1
Next j
secs = Round(Timer - start, 6)
MsgBox "run in " & secs, vbInformation
End Sub
您好,感謝的快速反應。我明白,這是不明確的,道歉。但是,你明白我想要什麼。我在B和C列股票價格上有超過6,500行的數據。我想用重新採樣技術生成一個類似的數據集,即6,500行。你的代碼沒有運行在我的電腦上,拋出「內存不足」的錯誤,並且在我將10000修改爲1000之後,花費了7秒來生成兩個數據單元。我想使用重新採樣生成數據以填充範圍(「D1:E6500」)。想知道,如果這個代碼對此有效嗎?再次感謝。 – VictorD
請更詳細地描述需要的計算。報告錯誤時總是指定將哪一行拋出。 – user3598756