みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
エクセルVBAでCSVファイルを取り込む方法です。
前回こちらの記事でそもそもCSVとは何か、またエクセルでCSVファイルを取り扱うときの注意点についてお伝えしました。
今回から実際にエクセルVBAでCSVファイルを取り込む方法についてお伝えしますが、本稿ではCSVファイルの内容を1行ずつ取り込んんでデバッグプリントするというとっても単純なプログラムについて解説をしていきます。
初心者の方でもわかるように懇切丁寧にお伝えできればと思いますので、ぜひトライしてみて下さいね。
CSVファイルを一行ずつ読み取るシンプルなプログラム
CSVファイルを一行ずつ読み取ってイミディエイトウィンドウに表示するプログラムはこちらです。
[vb]
‘CSVファイルの取り込み 一行ずつ取得してDebug.Printをする
Sub openCSV()
Dim strPath As String
strPath = “C:\Users\Noriaki\Dropbox\40_ブログ\vba-csv\test\ラーメン店アンケート.csv”
Open strPath For Input As #1 ‘csvファイルをオープン
Dim i As Long
Dim strLine As String
Do Until EOF(1)
Line Input #1, strLine
Debug.Print strLine
Loop
Close #1
End Sub
[/vb]
strPathを開きたいCSVファイルのパスとファイル名にして頂ければ、イミディエイトウィンドウにCSVファイルを1レコードずつ表示することができます。
CSVを一行ずつ取得するプログラムの流れ
#1やEOFなどあまり見ないものがあると思いますが、決して難しいものではありません。
全体の流れを簡単に説明しますと
- CSVファイルをオープン
- CSVファイルの終わりが来るまで一行ずつ繰り返し
- CSVファイルの現在の一行をデバッグプリント
- CSVファイルをクローズ
とこのように非常に単純な仕組みになっています。
実行結果
実行結果はこちらです。
いい感じです。
CSVファイルを操作する命令
前回お伝えした通り、CSVファイルはテキストファイルです。
VBAではテキストファイルを扱うための命令が用意されていますので、CSVファイルを扱うときもそれを利用すればよいということになります。
では、今回使用した命令について、一つ一つ解説をしていきますね。
OpenでCSVファイルを開く
まず7行目のOpenですが、見た感じでなんとなくわかると思いますが、CSVファイルを開く部分です。
一般的な構文としては
Open ファイル名 For 目的 As #番号
となります。
実際にエクセル上で開くのではないのですが、ファイルの中身を操作しますよという宣言に近いものとご理解頂ければと思います。
目的の箇所は
- Input:読み込むために開く場合
- Output:書き込むために開く場合
- Append:追記する場合に開く場合
から選択します。
ですが、書き込みに関しては「形式を指定して保存」つまり
Workbookオブジェクト.SaveAs Filename:=ファイル名, FileFormat:=”xlCSV”
でも実現できますので、Inputだけをひとまず覚えておくでも良いと思います。
Openでファイルを指定する際は「#番号」を割り当てる必要があります。いくつも同時にOpenしたい場合は別ですが、たいていはそのようなことはないと思いますので、「#1」としておけばOKです。
CSVファイルを一行ずつ読む
15行目がのLine InputがCSVファイルから一行を読み取る部分です。
Line Input #番号, 変数
Openで開いた「#番号」のファイルから一行を読み取り、変数に文字列として格納します。
ここでとても重要かつ素敵なことなのですが、Line InputはCSVファイルの1行目から読み取るのですが、その行を読み取ると「読み取りポイント」が次の行に移るのです。
この機能により、全ての行を取得するためのループがとてもシンプルに書けるわけです。
Do Until EOF(1)~LoopでCSVファイルの最後まで繰り返す
Line Inputは一行ずつの読み取りですので、それをファイル全体で繰り返すための部分が
12~17行目になります。
Do Until~Loopですが、構文としては
Do Until 条件式
~処理~
Loop
となります。条件式が成り立つときがくるまで処理を繰り返す、というものです。逆に言うと、条件式が成り立っていない間は繰り返す、ということになります。
今回の条件式
EOF(1)
ですが、これは「1」の番号のファイルの読み取りポイントが、End Of Fileつまりファイルの終端であればTrueとなります。
CloseでCSVファイルを閉じる
OpenがあればCloseもあるだろうということで、CSVファイルの読み取りが終わったらファイルを閉じましょう。
Close #番号
まとめ
以上、エクセルVBAでCSVを読み込む最も簡単なプログラムについて解説をしました。
まずはエクセルVBAでCSVファイルをOpenで開く、Line Inputで一行ずつ読み取る、Closeで閉じるといったテキストファイルの操作に慣れて頂ければOKと思います。
一行ずつデバッグプリントをしていますが、この一行ずつの文字列を「カンマで区切って」出力先をエクセルシートにすれば、データとして取扱いをすることができそうですので、次回はそれについて書いていますよ。
どうぞお楽しみに!