VBAにて、「Shift-JIS」のテキストファイルの読み取り・書き込みの方法について、ご説明いたします。
なお、「UTF-8」のテキストファイルの読み取り・書き込みの方法については、以下の記事をご参照ください。
また、そもそも「Shift-JIS」とか「UTF-8」が何なのかという説明は、以下の記事をご参照ください。
「Shift-JIS」のテキストファイルの読み取り方法
おそらく、VBAでのテキストファイルの扱い方を学習する際には、はじめにこの方法を学習するかと思います。
ただし、これはShift-JISのファイルに限って有効な方法です。
例えば、このようなファイルを読み取るとします。

サンプルプログラム
'①読み込んだテキストファイルの格納用変数
Dim buf As String
'②ファイルのフルパスを指定して、ファイルを開く
Open "C:\work\サンプル_SJIS.txt" For Input As #1
'③ファイルを最後まで読み込むまで、処理を繰り返す
Do Until EOF(1)
'④ファイルを1行ずつ読み込む
Line Input #1, buf
'⑤読み込んだデータ(変数buf)を使う処理を記述する
Debug.Print buf
Loop
'⑥ファイルを閉じる
Close #1
解説
- 読み込んだテキストファイルの内容を格納するために、String型の変数を準備しておきます。
- Openステートメントで、ファイルを開きます。
【構文】
Open ファイルのフルパス For Input As #ファイル番号
【説明】
ファイルのフルパスで指定したファイルが存在しないとエラーになりますので、ご注意ください。
ファイルの有無をチェックするには、Dir関数を使えば対応可能です。
また、確実に存在するファイルを選択するためには、「ファイルを開くダイアログボックス」を使うのが無難であり、利用者にも使いやすいシステムになるかと思います。(別の機会に記事を書こうと思います。)
ファイル番号については、複数のテキストファイルを同時に扱うには、「#1」「#2」…のように、一意になる番号を指定して下さい。
多くの場合は、1つのテキストファイルしか扱わないと思いますので、その場合は素直に「#1」と書いておけば良いです。 - ファイルを1行ずつ読み込んだ後、ループ処理の終了条件として、ファイルを最後まで読んだかを判定するためにEOF関数を使います。括弧内の数字は、先ほどの②でOpenしたファイル番号です。
- Line Inputステートメントで、ファイルを1行ずつ読み込みます。
【構文】
Line Input #ファイル番号, 変数
【説明】
先ほどの②でOpenしたファイル番号を指定してファイルを読み込んで、1行分のデータを変数に格納します。 - 先ほどの④で指定した変数を使って、読み込んだデータ(変数buf)の内容を使う処理を記述します。
- 先ほどの②でOpenしたファイル番号を指定して、Closeステートメントでファイルを閉じます。
プログラムが終了すれば、ファイルは自動的に閉じられますが、何かの不具合が発生した場合など、ファイルが開かれたまま処理が中断してしまいますので、プログラミングのお作法として、開いたファイルは必ず閉じましょう。
「Shift-JIS」のテキストファイルの書き込み方法
サンプルプログラム
'①出力するファイルのフルパスを指定して、ファイルを開く
Open "C:\Sample\Data.txt" For Output As #1
'②テキストファイルに1行ずつ書き込む
Print #1, "テスト①"
Print #1, "テスト②"
Print #1, "テスト③"
'③ファイルを閉じる
Close #1
解説
- Openステートメントで、ファイルを開きます。
【構文】
Open ファイルのフルパス For Output As #ファイル番号
【説明】
先ほどのファイルの読み取りの際には「For Input」としていた箇所が、「For Output」または「For Append」となります。
「For Output」と「For Append」の違いは、指定されたファイルが既に存在する場合の挙動の違いです。
◆「For Output」とした場合は、指定されたファイルに書かれていたデータを消して、新しく書き込んだデータだけが書き込まれます。つまり、「上書き保存」のようなイメージです。
◆「For Append」とした場合は、指定されたファイルに書かれていたデータの末尾に、データを追記します。(私は今までに使った記憶がありません。)
いずれの場合も、存在しないファイルを指定した場合は、自動的に新しいファイルが作られます。 - Printステートメントで、データを書き込みます。
【構文】
Print #ファイル番号, 文字列
【説明】
先ほどの①でOpenしたファイル番号を指定して、文字列をファイルに1行ずつ書き込みます。
もちろん、文字列には変数も指定可能です。 - 読み取りの時と同様にプログラミングのお作法として、先ほどの①でOpenしたファイル番号を指定して、Closeステートメントでファイルを閉じます。
実行結果
上記のサンプルプログラムを実行すると、こんなテキストファイルが作られます。

コメント