VBAでブートストラップを作成しようとしていますが、これは動作しません。私は、列BおよびCのデータを有する2社の株式のデータセットを有する:ブートストラップ、配列、大きなデータセット、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
IがセルD1に平均及びディスプレイを取り、列Cからランダムに1万回を選択する必要があります。 E1、E2、...、Enと同様ですが、C列のデータに基づいています。
データセットが2つ以上のストックと方法論で大きく多数の実行が必要であり、各セルに毎回平均の簡単な印刷が非常に長い時間を要する。だから私は配列を使用する必要があり、私はそれを取得していません。 私はそれを "手動で"行うことができますが、より良い方法があると確信しています。
次のコードは、毎回スプレッドシートに印刷されるため、私のマシンで実行するのに時間がかかります。私は実行時に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行を生成したいと思います。あなたのコードは私のPC上で実行されておらず、「メモリ不足」というエラーが表示され、10000を1000に修正した後、2セルのデータを生成するのに7秒かかりました。 Range( "D1:E6500")にデータを取り込むためにリサンプリングを使用してデータを生成したいとします。このコードがこの目的のために効率的であるかどうか、不思議に思いますか?再度、感謝します。 – VictorD
必要な計算についてもっと説明してください。また、エラーを報告するときに、いつそれらをスローするかを指定します。 – user3598756