CSVファイルをExcel VBAで扱う(2)CSVファイルの内容を読み込んで処理する

Excel マクロ、VBA

スポンサーリンク

前回の記事では、CSVファイルを扱うExcel VBAで、Output構文を使って書き込みを行うソースコードを紹介した。
今回はそれに続き、Input構文を使って、内容の読み込みを行う処理を扱う。

CSVファイルをExcel VBAで扱う(1)新規作成したCSVファイルに内容を書き込みする

サンプルソースコード:CSVファイルの内容を読み込む

次に示すのは、CSVファイルの内容を1行ずつ読み込んで、それを忠実にExcelのセルに書き込んでいくマクロのサンプルだ。

Input構文に行くまでに Application.FileDialog(msoFileDialogFilePicker) とか使って前準備が回りくどいが、自由にCSVを選んで開く構文にしたいので必要なところ。
他にもちょっと難しい内容を含むけどね。

Excel VBA ファイルを開くダイアログについて(1)ファイル1つだけ開くタイプのダイアログ

解説

Input でファイルを開き Line Input で内容を1行ずつ読み込む

先述の通り

Open myCSVFile For Input As #1

と、Inputを使ってCSVファイルを開いている。

そして、そのテキストファイル(CSVファイル)の内容を1行ずつ読み込むのが

Line Input #1, var

という構文で、これはもうコピペで使ってしまおう。

実際のところ私は、1行ずつ読み込むよりは一気に全ての内容を読み込む方が好きで、その方法も後ほど紹介する。

さて、ループ処理の最初で

Do Until EOF(1)

なんていうのがあるけど、EOFというのはEnd Of Fileの略で、ファイルの最後のことだ。

もっともExcel VBAでこのEOFなんていうのを使うのは、私としてもこのテキストファイル読み込み処理のときくらいだ。

ファイルの空き番号とかいうやつを

Open myCSVFile For Input As #1

の構文で1として取得したわけだけど、その番号1
EOF(1)
と再度書いている。
つまり、ファイル番号=1番として扱ってるファイルの一番最後までということ。

Splitで、カンマ区切りの配列にする

CSVファイルの定義は、各行がカンマ文字によって区切られたファイルだ。
そして、そのような区切り文字で文字を区切る処理に使う定番は、Splitという構文だ。

arrCommaSplit = Split(“,” & var, “,”)

ここで私は、変数varに対して
“,” & var
と先頭にカンマ文字を付ける処理をわざわざやってて、普通の人はあまりこんなことはしないと思う。

なぜこれをするかというと、変数varがたとえば
var=”2,4,6,8,10″
というカンマ区切りの文字だとして、これを普通にSplitにかけるなら
arrCommaSplit = Split(var, “,”)
となる。

でもこれをすると、Splitされたもの(配列という)の中身は

arrCommaSplit (0)=”2″
arrCommaSplit (1)=”4″
arrCommaSplit (2)=”6″
、・・・・・・

というように、0から始まるものに強制的にされてしまう。

これがとっても気持ち悪いので、最初にカンマ文字をわざわざ追加することで、配列の中身が1から始まるものにしているわけだ。
つまり最初にカンマ文字を追加することで、

arrCommaSplit (0)=”” (何もない、nullというやつ)
arrCommaSplit (1)=”2″
arrCommaSplit (2)=”4″
arrCommaSplit (3)=”6″
、・・・・・・

というように、配列の中身を1から開始とみなすことができる。
本当は0から開始だけど、0番は断じて見ないことにする。

そしてUBoundというのを使ってるけど、これが配列の項目数を取得するやつだ。

Excel VBA 配列について(5)配列の要素数を取得するUBoundとLBound

ただ、arrCommaSplit という配列の数字が0から始まっていると、本当は5個のカラムがある場合でもこのUBoundの結果は4になってしまい、とても面倒なことになる。
だからSplitの先頭にカンマ文字を追加する処理を加えているわけだ。

今回はこの辺りで終了。
InputとOUtputの両方を使うサンプルなど、今後紹介していく。

スポンサーリンク