【VBA】テキストファイルの読み取り・書き込み(Shift-JIS編)

VBA

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ステートメントでファイルを閉じます。

実行結果

上記のサンプルプログラムを実行すると、こんなテキストファイルが作られます。

コメント

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