ExcelVBAでのCSVファイルの読み込み
ITサポーターTsuchidaの土田です。ExcelVBAでもっとも役立つものとして、CSVファイルを読み込んで、必要なデータと項目を絞ったExcelのシートを作りです。手作業でやると単純作業の繰り返しで非常に効率が悪いですが、ExcelVBAで行うと正確でしかも速いです。
クラウドによりニーズが拡大
最近、クラウドのシステムの普及に伴い、クラウドのシステムからCSVファイルをダウンロードして、Excelのシートにするという作業が発生します。
クラウド側にダウンロードの際に条件指定や列指定や並び替えを指定できればいいのですが、出力できるCSVファイルの形式が決まっている場合は、どうしてもExcel側で編集が必要になります。この作業が意外と手間ががかります。
そこで、CSVファイルをExcelVBAで自動処理が有効になります。
CSVファイルとは何か?
CSVファイルとは、Comma Separated Valueと呼ばれるテキストファイルです。項目をカンマで区切ったテキストファイルで、文字・カンマ・ダブルクォーテーション・改行で構成されているファイルです。そのため、Excelでおなじみのフォントや色や罫線などの書式情報はありません。
CSVファイルをExcelファイルと勘違いしている人がいるのですが、CSVファイルをExcelファイルではありません。
CSVファイルは汎用性が高い
そもそも多くのシステムがなぜCSVファイルを出力するかと言うと、CSVファイルは汎用性が高いからです。
システムのデータはテーブルの中に保存してあって、テーブルには項目と呼ばれるフィールドが複数存在します。カンマ区切りは、フィールドをカンマで区切ることで出力できるため、テーブルのデータをCSVファイルに出力することは簡単です。
しかもCSVファイルはテキストファイルなので、すべてのデータが文字なので、文字を意識して処理すればいいのです。CSVファイルはテキストファイルなので、メモ帳などのエディタでも開けますし、Excel以外の多くのアプリで開くことができます。
CSVファイルは30年以上前からあるファイル形式で、私もオフコンデータをPCの表計算ソフトに渡すときにすでに使っていたので、歴史と伝統のあるファイル形式です。
カンマで区切られているということは、カンマによってExcelの列に分けられるので、Excelで開いても違和感がないのです。
ExcelVBAでCSVを読込むポイント
CSVファイルを開く
CSVファイルを読むためには、一番最初に行うのはCSVファイルをオープンすることです。ファイルをオープンするとディスクにあるファイルがメモリに展開して、ExcelVBAで実行可能になります。
Open CSVのファイル名 For Input As #1
For Inputはファイルを開くときは読み込みモードで開くという意味で、オープンしてもCSVファイルは編集されません。
#1は「#」のあとは数字や数値の変数なので、他にCSVファイルを同時に開くことがなければ、「1」でかまいません。
CSVファイルを読む
CSVファイルが開かれていたら、そのCSVファイルを読み込みますが、読み込んだCSVファイルのデータを編集するための変数を定義します。
Dim strLine As String ‘CSVファイルの1行を保存する文字列
Dim strAry As Variant ‘1行分のデータをカンマで分離する配列
定義が終わったら、CSVファイルを1行ずつ読み込みます。
Line Input #1, strLine '1行読み込み
strAry = Split(strLine, “,”) ‘1行のデータをカンマで分離して配列に振分
|
タイトル行の処理
|
Do Until EOF(1)
Line Input #1, strLine '2行目以降の読み込み
strAry = Split(strLine, “,”) ‘2行目以降のデータをカンマで分離して配列に振分
|
データ行の処理
|
Loop
Line InputはCSVファイルの先頭行から1行ずつ読み、最終行の次のEOFになったら処理を終了します。
CSVファイルを閉じる
CSVファイルの読み込みが終了したら、CSVファイルをクローズして、メモリから破棄します。
Close #1
CSVファイルは読み込みなので、CSVファイルの保存は考える必要はありません。
CSVファイル読み込み処理での注意点
CSVファイルは文字データなので書式は一切ついていません。そこでCSVファイルを読み込んで、Excelで新しいシートに編集する場合に、必ず書式設定が必要になります。
書式設定はどの段階で行えばいいかというと、書式によって違います。
セルの表示形式:セルに値を代入する前後
行の書式:CSVファイルの次のデータを読む前
列の書式:CSVファイルを読み終わってデータがすべてセットされた後
罫線:一番最後(データで線種が違う横線は行の書式と同じタイミング)
最後に
ネットで「CSV Excel VBA」で検索するといろんなページが見つかります。それくらい単に読み込んで、新しいシートに編集する処理はたくさん紹介されています。
ただ、紹介されているサンプルが実務でそのまま使えるわけではありません。なぜならCSVファイルのファイル名をどうするかとか、新規で作成したシート(ブック)をどういう名前で保存するのかとか、ユーザーにVBAを実行するためのフォームを作るのかとか、実務までには細かな調整ごとがあるのです。
ただ実務の調整は職場ごとに違うので、まずはCSVファイルの読み込むVBAを1つでも作ってみることをお勧めします。私も1度作ったものを何回も使いまわしをしていますので、1回でも自力で作ると作ったものが次のVBAの作成時にも応用できるようになります。
https://note.com/it_supo_tsuchi/circle/boards/7fcf9b7cba2d/posts/304e601878bc