0

テーブル (listobject) へのデータの書き込みでパフォーマンスが低下しています

オブジェクトのコレクションがあり、行ごとにテーブルに書き込みたい

For Each msrecord In mls.mlRecords
    Dim oNewRow As ListRow
    Set oNewRow = Sheets(mls.name).ListObjects(1).ListRows.Add(AlwaysInsert:=True)
    oNewRow.Range.Cells(1, 1).Value = msrecord.id
Next msrecord

ただし、これは遅すぎます。Application.ScreenUpdating = False を試しましたが成功しませんでした。

私の考えは、最初に配列を埋めてから、一度にすべてをテーブルに書き込むことです。

Dim outputArray As Variant

Dim counter As Long
For counter = 1 To mls.mlRecords.Count

    outputArray(counter, 1).Value = msrecord.id
    outputArray(counter, 2).Value = msrecord.name
    outputArray(counter, 3).Value = msrecord.morefields

 Next

 Sheets(mls.name).ListObjects(1).DataBodyRange.Value = outputArray

ただし、バリアント配列の値を代入すると、型の不一致エラーが発生するようになりました。開始するコレクションがあるため、配列を実際に ReDim することはできません。

何かご意見は?最初に配列を構築するのは理にかなっていますか? テーブル (listobjects) にデータを効率的に書き込むにはどうすればよいですか?

4

1 に答える 1

0

Redim を呼び出すまで、変数は配列ではありません。それ以前は、Variant のデフォルト値である Empty です。これをループの前に追加してみてください。

ReDim outputArray(1 to mls.mlRecords.Count, 1 to 3)
于 2015-08-03T20:58:05.580 に答える