|
毎回お世話になっております。
また、ご質問させてください。
数十万レコードを処理する必要のあるVBAプログラムを作っています。
現在、私がやっている方法が以下のようなものです。
--------------------------------------------------------------------------
1.配列宣言
dim array as Variant
2.CSVファイルをワークブックとして開く。
Workbooks.OpenText filename:=csvName, DataType:=xlDelimited, _
Comma:=True
3.CSVファイルの中身を全て配列に格納する。
array = Workbooks("data01.csv").Worksheets(1).Range("A1:S65000")
4.配列を、目的のシートに範囲指定で貼り付ける。
Workbooks("result.xls").Worksheets(x).Range("A1:S65000") = array
5.配列を初期化する。
Erase array
2.〜5.を、csvファイルの数だけ繰り返す。
--------------------------------------------------------------------------
ちなみにcsvファイルは65000件毎に通し番号付きのファイル名で存在します。
csvファイルをシート別にひとつのxlsファイルに読み込んでから、本筋の処理を行う流れになっています。なので、csvファイルが10個あれば、それらをsheet1からsheet10にコピーするといった感じです。
このやり方で、120万件ほどのデータを処理しようとすると「メモリ不足です」の警告が出てしまいます。
配列の中身の貼り付けが終る毎に、Erase arrayで配列の初期化をしているのですが、Eraseでは配列の開放にはならないのでしょうか。
ご教授よろしくお願いします。
(何か足りない情報がございましたら、追記させていただきますのでご指摘ください。
|
|