「はぁ、またこの作業か……」毎朝、システムから吐き出された大量のCSVファイルを一つずつ開き、Excelにコピペして整形する。繁忙期だとこの単純作業だけで午前中が終わってしまったり、普段より遅くまで残業したりすることもありますよね。
- 「もっと楽にできないかな」
- 「プログラミングって難しそうだけど、自分でもできるのかな」
実はVBAの「Open」と「Line Input」という2つのテクニックを覚えるだけで、その悩みは解決するかもしれません。
今回は、ITに苦手意識がある方でも、コピペで今日から使える「テキストファイル読み込み術」をご紹介します。
テキストファイルを読み込む「2つのステップ」
プログラミングと聞くと身構えてしまうかもしれませんが、中身はとてもシンプルです。例えるなら「図書館で本を借りて、一行ずつ音読する」のと同じです。
- Open(オープン):本を開く
- Line Input(ライン・インプット):一行ずつ読む
これだけです。とてもシンプルですよね。
Openステートメントとは
これは読んで字のごとく、ファイルという名の「本」を開く作業です。
VBAでは「このファイルを、読む専用として、1番という番号をつけて開きます」という宣言をします。
Line Inputとは
開いた本を、上から一行ずつ読み取っていく作業です。
ファイル全体を一気に読み込むのではなく、一行ずつ処理するため、メモリ(パソコンの作業スペース)を圧迫せず、動作が非常に軽いのが大きな特徴です。
私の失敗談:ファイルを閉じるのを忘れてパニック
ここで私のちょっとした失敗をお話しします。
初めてこのコードを書いたとき、ファイルを「開く(Open)」ことばかりに集中して、「閉じる(Close)」のを忘れてしまいました。
その結果、次に同じファイルを開こうとした際、「他のプログラムが使用中です」というエラーが発生してしまいました。
「本を読んだら、最後は必ず棚に戻す(Close)」
ぜひ忘れないようにしてください。
コピペでOK!実践コード解説
以下のコードをVBAの標準モジュールに貼り付けてみてください。
CSVでもtxtファイルでも、一行ずつ読み込んでイミディエイトウィンドウに表示します。
Sub ReadTextFileSample()
' 変数の宣言
Dim filePath As String
Dim fileLine As String
Dim fileNo As Integer
' 1. 読み込みたいファイルのパスを指定します(ご自身の環境に合わせて書き換えてください)
filePath = "C:\Users\YourName\Desktop\test.csv"
' 2. 空いているファイル番号を取得します
fileNo = FreeFile
' 3. ファイルを開きます(読み取り専用モード)
' フォーマット:Open パス For Input As #番号
Open filePath For Input As #fileNo
' 4. ファイルの最後まで一行ずつ読み込みます
' EOFは「End Of File(ファイルの終わり)」のことです
Do Until EOF(fileNo)
' 一行読み込んで変数 fileLine に入れます
Line Input #fileNo, fileLine
' 読み込んだ内容をイミディエイトウィンドウに表示します
Debug.Print fileLine
Loop
' 5. ファイルを閉じます
Close #fileNo
MsgBox "読み込みが完了しました!"
End Sub
注意:文字化けが起きたときのチェックポイント
このコードを実行した際、イミディエイトウィンドウに表示された文字が奇妙な記号や漢字に化けてしまうことがあります。
これは、読み込もうとしているファイルの文字コードが原因です。
今回ご紹介したOpen文やLine Inputという仕組みは、Windowsの標準的な文字コード(Shift-JIS)を前提として動いています。
そのため、近年主流となっているUTF-8という文字コードで保存されたファイルを読み込むと、高確率で文字化けが発生します。
もし文字化けしてしまった場合は、以下のいずれかの方法を試してみてください。
- ファイル側を合わせる(一番簡単な方法):読み込みたいテキストファイルやCSVファイルを一度メモ帳で開き、「名前を付けて保存」を選ぶ際に、文字コードを「ANSI」または「Shift-JIS」に指定して保存し直してください。これで元のコードのままでも正しく読み込めるようになります。
- VBAのコードを拡張する:どうしてもUTF-8のファイルのまま読み込みたい場合は、Open文の代わりにADODB.Streamという、文字コードを指定できる少し高度なオブジェクトをVBAの中で作成して処理を切り替える必要があります。
この方法のメリット
ExcelでCSVを直接開く方法もありますが、「Line Input」を使うメリットは、「必要なデータだけを狙って抽出できる」点にあります。
例えば、10万行あるデータの中から「特定の顧客IDが含まれる行だけ」を抽出する処理も、このコードを少しアレンジするだけで簡単に実現できます。
業務の効率化に向けて、ぜひ試してみてください!
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント