エクセルVBAでCSVを読み取る初心者向けの最も簡単なプログラム


みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

エクセルVBAでCSVファイルを取り込む方法です。

前回こちらの記事でそもそもCSVとは何か、またエクセルでCSVファイルを取り扱うときの注意点についてお伝えしました。

CSVとは何か?そしてエクセルでCSVファイルを扱うときの注意点
初心者向けエクセルVBAで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などあまり見ないものがあると思いますが、決して難しいものではありません。

全体の流れを簡単に説明しますと

  1. CSVファイルをオープン
  2. CSVファイルの終わりが来るまで一行ずつ繰り返し
    • CSVファイルの現在の一行をデバッグプリント
  3. CSVファイルをクローズ

とこのように非常に単純な仕組みになっています。

実行結果

実行結果はこちらです。

CSVファイルをエクセルVBAで読み込んだ

いい感じです。

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 InputCSVファイルから一行を読み取る部分です。

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と思います。

一行ずつデバッグプリントをしていますが、この一行ずつの文字列を「カンマで区切って」出力先をエクセルシートにすれば、データとして取扱いをすることができそうですので、次回はそれについて書いていますよ。

エクセルVBAでCSVデータをカンマで区切ってワークシートに取り込む方法
エクセルVBAでCSVを取り込む方法です。今回は、Splitという命令と配列を使ってCSVのレコードをカンマで区切ってワークシートに転記をしていく方法について解説をしていきます。

どうぞお楽しみに!

連載目次:エクセルVBAで色々なCSVファイルを取り扱う

様々なソフトウェア間のデータ交換の際に一般的に多く活用されているCSVファイル。エクセルで取り込んで集計や加工することもたくさんあることと思います。このシリーズでは、CSVファイルをエクセルVBAで取り込むためのテクニックについてお伝えしています。
  1. CSVとは何か?そしてエクセルでCSVファイルを扱うときの注意点
  2. エクセルVBAでCSVを読み取る初心者向けの最も簡単なプログラム
  3. エクセルVBAでCSVデータをカンマで区切ってワークシートに取り込む方法
  4. エクセルVBAでCSV取込み~改行がされないパターンの対処法
  5. エクセルVBAでダブルクォーテーションで囲まれているCSVファイルを取り込む
  6. エクセルVBAでデータにカンマが含まれてしまっているCSVを取り込む
  7. 文字化けよさようなら!エクセルVBAでUTF-8のCSVを読み込む方法

タイトルとURLをコピーしました