ファイル操作


外部ファイルの入出力

テキストファイル(.txt)等、エクセル以外のファイルをVBAから操作したい場合があります。

VBAを使えば、指定したファイルの内容を読み込んだり、ファイル自体を作成したりすることができます。


テキストファイルの作成

早速テキストファイルの作成を行ってみましょう。

以下はテキストファイルを作成し、適当な文字列を数行書き込むコードです。

'テキストファイルを作成するテスト
Sub outputtest()
    Dim ff As Long
    Dim filename As String
    filename = ThisWorkbook.Path & "\text.txt"
    ff = freefile 'フリーファイル変数
    Open filename For Output As #ff
        Print #ff, "テキストファイルを"
        Print #ff, "出力する"
        Print #ff, "テストプログラム"
        Print #ff, "です。"
    Close #ff
End Sub

ファイル名としてthisworkbookpath & "text.txt"を指定しており、エクセルファイルのあるフォルダ内にtext.txtという名前のtxtファイルを作成します。

freefileはプログラムからファイルを特定するための番号を自動で振ってくれる特殊な関数です。

ここではoutput(出力モード)でopen(ファイルを開く)しており、『print #ファイル番号 , "テキスト"』と記述することでテキストを追加することができます。ファイルは新たに作成されます。

最後にファイルを閉じて終了です。ここで閉じないと、プログラムが終了して画面上に何も表示されていなくとも、内部的にファイルが開きっぱなしになって予期しない状況が起こる場合がありますので、注意してください。エラー等で開いたファイルを閉じ損ねた場合はタスクマネージャから終了させるようにしましょう。


出力以外のモード

ファイルを開く際のモードとして、output以外にinput(入力)append(追加)binary(バイナリ)等のモードがあります。

基本的に出力するときはoutput、入力するとき(ファイルを読み込むとき)はinputモードを使います。

以下は先ほど作成したtest.txtを入力モードで開き、内容を1行ずつ読み取ってセルに表示するプログラムです。

ここでは条件が成立するまでループを行う、『Do Until ~ Loop』構文を利用しています。VBAではEOFによってテキストファイルの最終行を判定します。

'テキストファイルを読み込むテスト
Sub inputtest()
    Dim i As Long
    Dim ff As Long
    Dim filename As String
    Dim buf As String
    filename = ThisWorkbook.Path & "\text.txt"
    ff = freefile
    Open filename For Input As #ff
        Do Until EOF(ff) 'EOF(最終行を示すフラグ)が立つまでループ
            i = i + 1
            Line Input #ff, buf
            Cells(i, 1) = buf
        Loop
    Close #ff
End Sub

ファイル入出力を覚えると、VBAを使って作ることができるプログラムの範囲が飛躍的に広がります。ぜひ身につけてください。