2017-11-01 17 views
0

Excelを出力するための高速バージョンメソッドはありますか?ExcelシートへのVBA配列の高速出力

私は現在、3つのアレイoutput_dt, output_s1, output_s2に格納されたデータを持っています。

フォーマットのサンプル:

15/12/2017 2165 2170 
15/12/2017 2165 2175 
15/12/2017 2165 2180 
15/12/2017 2165 2185 
15/12/2017 2165 2190 
15/12/2017 2165 2195 
15/12/2017 2165 2200 
15/12/2017 2165 2205 
15/12/2017 2165 2210 

私の現在の作業ソリューションはこれです:

Application.ScreenUpdating = False 
Worksheets("Strategies").Columns(4).ClearContents 
Worksheets("Strategies").Columns(5).ClearContents 
Worksheets("Strategies").Columns(6).ClearContents 
[d1].Resize(UBound(output_dt)) = Application.Transpose(output_dt) 
[e1].Resize(UBound(output_s1)) = Application.Transpose(output_s1) 
[f1].Resize(UBound(output_s2)) = Application.Transpose(output_s2) 
Application.ScreenUpdating = True 

しかし、これだけでも150行ため、痛々しいほど遅いです。

これをスピードアップする方法はありますか?

+3

計算を手動に設定していますか?そうでなければ、あなたの '[d1] .Resize(UBound(output_dt))= Application.Transpose(output_dt)'ステートメントのそれぞれの後に、あなたのワークシートが多くの計算を処理している可能性があります。それ以外に、私はなぜそれが全く遅くなるのか理解できません。 – YowE3K

+3

同じ1つの2D配列に3つの列を配置できない理由はありますか? 'Worksheet.Change'でハンドラーを実行していますか? 'Application.EnableEvents'はオフですか? '[d1]'表記は暗黙的にアクティブなワークシートを参照しています、それは意図されていますか?同じワークシートを明示的に3回間接参照し、アクティブシートであると仮定して暗黙的に3回繰り返します。一度しかできませんでした。腸の感覚は、それが永遠に取っている 'ClearContents'コールだと言います。数百万の行を持つバリアント配列をダンプすることは、それ以外の場合にはかなり瞬時になります。 –

+0

YowE3K - 前後の自動計算をオフにしたときのように、これが解決しました。私はそれが各機能の間に再計算されることに気づいていなかった。 マットのマグ - いいえ - 元のソースコードでどうやってやるのがうまくいかなかったのです(正しい方向に向けることができれば、下に追加されます)。 3枚のシートを指定するだけでなく、ActiveSheetを参照するのが遅いのですか? – LLC

答えて

0

ループは日付と2つの数字のリストをループして新しいデータセットを作成し、3倍の1次元配列を3つ作成します。

For i = LBound(data) To UBound(data) 
     For j = LBound(data) To UBound(data) 
      If data(i, 1) = data(j, 1) Then 
       If data(i, 2) < data(j, 2) Then 
        x = x + 1 
        'MsgBox data(i, 2) & "-" & data(j, 2) 
        ReDim Preserve output_dt(0 To x + 1) 
        ReDim Preserve output_s1(0 To x + 1) 
        ReDim Preserve output_s2(0 To x + 1) 
        output_dt(x) = data(i, 1) 
        output_s1(x) = data(i, 2) 
        output_s2(x) = data(j, 2) 
       End If 
      End If 
     Next j 
    Next i 
関連する問題