CSVデータをExcelで表示する際のレスポンス速度を上げるには?


まなぶ  2002-09-12 05:01:17  No: 104923

2001/12/20にしんさんが投稿された件で誰か教えて下さい。

サンプルソース
'Excelへの参照
Set xlsApp = CreateObject("Excel.Application")
'Excelにブックを追加
Set xlsBook = xlsBook.Sheets("Sheet1")
'読み込むcsvファイル名
strFileName = "test.csv"
'空いているファイル番号を取得
intFileNo = FreeFile
'csvファイルを開く
Open strFileName For Input As intFileNo
'ファイルの最後に達するまでループ
Do Until EOF(intFileNo)
'読み込んだ行数をカウント
intRow = intRow + 1
'1行分のデータを読み込む
For intCol = 1 To 5
'ファイルから読み込んだ内容を変数に保存
Input #intFileNo, strRecBuff
'変数の内容をExcelに送る
xlsSheet.Cells(intRow, intCol) = strRecBuff
Next
Loop
'Excelを表示
xlsBook.Application.Visible = True
'csvファイルを閉じる
Close intFileNo
'オブジェクトを解放
Set xlsSheet = Nothing
Set xlsBook = Nothing
Set xlsApp = Nothing

列数をカウントするループロジックの部分で
For intCol = 1 To 5
とありますが、これを 1 To 257にし、
csvデータが5000行(1行:256項目)あるものをコマンドボタンからExcelで表示しようとした時、フリーズしてしまします。
このような膨大なデータを扱う場合、パフォーマンスを上げる良い方法はないでしょうか?


Say  2002-09-12 17:42:14  No: 104924

Excel Object を使うのなら、
Applicationオブジェクトのメソッドで
直接インポートしたほうが速いでしょう。

インポート、というよりcsvを読み込んで
xls形式で保存するだけなのですが・・・。

コードについては、一度Excel上で
マクロの自動記録をOnにして
手動でインポートしてみてください。


まなぶ  2002-09-12 19:01:44  No: 104925

私が最初にやろうとしてた事は、下記内容に関係あるように思います。

●VBからExcel操作を行う回数に制限がある。(Visual Basicのバグみたい)
・32768回
現象:VBからExcelを操作できる回数(ExcelApp.XXXの数)である。
この回数を超えると、Excelが固まりVBに戻らなくなる。
回避:Excelのプロセスを殺すとVBにエラーで戻れる。

・16384回
現象:VBからExcelを操作して、最後にExcelを表示にする処理を
作成した場合に、表示にしたExcelを終了しても、Excelのプロセスが非表示で裏に残ってしまう。
回避:Excelのプロセスを殺すしかない。

Sayさんのやり方でうまくいきそうに思うのですが、やり方が今ひとつわかりません。詳しい方法を教えて戴けないでしょうか?
VBとExcelは初心者なので、理解が及ばないこともありますがよろしくお願いします。


Say  2002-09-13 14:18:13  No: 104926

表示できればいいのなら、たとえば、
Set xlsBook = xlsApp.WorkBooks.Open("C:\CSVFOLDER\Test.csv")
xlsApp.Visible = True
とか・・・。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加