【VBAでCSV読込み】VBAでCSVを正確・高速に読み込む方法【コピペでOK】

今回は、Excel VBAを使ってCSVファイルを「正確に」かつ「高速に」読み込む方法をシェアします。

まず、Excel VBA は Javaに代表されるプログラム言語と違い、CSVを読み込むためのライブラリがありません。
なので、自力で読み込む必要があります。
しかし、CSVを読み込む処理を自力で実装することはオススメしません。
それは以下2点の理由からです。

  • CSVには色々なタイプがあること(例えば、タブ区切りのCSVやカンマ区切りのCSV)
  • エスケープ文字や改行コードの混入などに備え、CSVの仕様を全て理解する必要があること

そこで、今回はExcel自体の機能を使用してCSVを読み込む方法を採用します。
今回は、Excel自体の機能を使用して最も高速に読み込む方法をシェアします。



ソースコード

まずはソースコードを以下にシェアします。


上記は、CSVデータ1行分のデータを格納するクラスです。

上記は、実際にCSVを読み込んで結果をCollectionオブジェクトに設定して返却する処理です。

上記で登場する Scripting.FileSystemObject を使用するためには、
「参照設定」という作業が必要になります。
この作業方法については、ここ で方法をシェアしています。(非常に簡単です)

上記の方法で1万行のCSVファイルを読み込んだ際のベンチマークを以下に記載します。

回目 処理時間
1回目 0.57秒
2回目 0.55秒
3回目 0.55秒
平均: 0.55秒

平均で0.55秒で読み込むことができました。
CSVの形式やエスケープ文字など、実装が大変な部分を回避しつつ、
高速に読み込むことができたと思います。

まとめ

今回は、Excel VBAで高速にCSVファイルを読み込む方法をシェアしました。
Excel VBAについて他にもこんな処理はどうやるの?などの質問がある場合は、
フォームからご連絡頂けたら幸いです。
記事にして共有させて頂きます。