【EXCEL VBA】プログラムの動作をログファイルに出力する Openステートメント・Printメソッド

スポンサーリンク

はじめに

ひらちんです。

プログラムがきちんと動いているかどうか検証するときに、プログラム内でどのような結果になっているかなど、ログファイルに出力して記録をとっておくと、あとから見返すことが出来て便利です。

今回は、その方法を紹介します!

スポンサーリンク

Openステートメント

ログファイルは、通常はテキストファイルを利用します。

テキストファイルを開くときには、Openステートメントを使います。

※Openステートメントで開かれたファイルは、パソコンの内部で開いているので、画面上には表示されません。

構文

Open pathname For mode [ Access access ] [ lock ] As [ # ] filenumber [ Len = reclength ]

引数名指定説明
pathname必須ファイル名を指定する文字列、PATHを指定
mode必須ファイルモード(ファイルをどのように開くか)を指定
Append、Binary、Input、Output、 Randomで指定
指定しないと、Randomで開かれる
access省略可開いたファイルに対して許可される操作を指定する
ReadWriteRead Writeで指定
lock省略可開いたファイルに対する他のプロセスからの操作の制限を指定する
SharedLock ReadLock WriteLock Read Writeで指定
filenumber必須範囲が1以上511以下の有効なファイル番号、次に使用可能な番号を取得するには、FreeFile関数を使用する
reclength省略可32,767(バイト)以下の数値です。ランダムアクセス用に開いたファイルの場合、この値がレコード長になります。シーケンシャルファイルの場合、この値はバッファーされる文字数になります

引数の設定は色々あるのですが、ここでは簡単にログを出力できる方法をやってみます。

とりあえずここまで、

Sub sample()

    '書き込みたいファイル名
    Dim FileName As String
    FileName = "log.txt"
    
    'ファイルを開く
    Open ThisWorkbook.Path & "\" & FileName For Append As #1

    'ファイルを閉じる
    Close #1
    
End Sub

「’ファイルを開く」のところでファイルを開いています。

引数は、pathname

ThisWorkbook.Path & "\" & FileName

としています。

コードを記述しているファイルのパスに、指定したファイル名(log.txt)を「\」でつないでます。

また、mode

Append

を指定しています。

これは「追記モード」です。現在記入されているものに追加してテキストを記録していきます。

最後に、filenumber

#1

を指定しています。

1~511までの番号で任意に指定します。他のプログラムとかで開いているおんなじ番号をしてしてしまうとエラーが起こります。

この番号は、テキストを書き込むときにどのファイルに書き込むかの指定で使います。


どの番号使ってるかなんてわかんねーじゃん。って思った方、安心して下さい。Freefile関数という便利な関数が用意されています。これを使えば、空いてるファイル番号を取得出来ます。


とはいえ、最初のうちは「#1」って指定して、終わったらちゃんと閉じるで問題ないと思います。

では、実行してみましょう!

ここでは、まだ書き込みは行っていませんので、中身は空っぽです。

また、引数:pathname で指定したファイルが存在しない場合は、AppendBinaryOutput、または Randomモードでファイルを開くと、そのファイルは自動的に作成されます。

ここでは、log.txt ファイルがない状態で実行しましたので、log.txt が自動で作られているのが分かりますね。

また、「’ファイルを閉じる」のコメント部分の

Close #1

これ重要なので注意してください。

ちゃんとファイルを閉じてあげないと、#1が開きっぱなしになってしまうので、次書き込みたいときに、#1が指定出来なくてエラーになります。

「開いたら、閉じる」

スポンサーリンク

Printメソッド

では、次にファイルにテキストを書き込む方法です。

先程のコードに追記します。

Sub sample()

    '書き込みたい文字列
    Dim str As String
    str = "ひらちんの部屋"

    '書き込みたいファイル名
    Dim FileName As String
    FileName = "log.txt"
    
    'ファイルを開く
    Open ThisWorkbook.Path & "\" & FileName For Append As #1
    
    'ファイルに書き込む
    Print #1, Now & ":" & str

    'ファイルを閉じる
    Close #1

End Sub

「’ファイルに書き込む」

Print #1, Now & ":" & str

の部分です。

Now は今の日時、str はコードの初めに指定しています。

構文

Print filenumber, 書き込みたい文字列

filenumberは、開いたファイルに指定した「#1」です。

「#2」で指定してたら「#2」ですよ。

簡単だと思うので、早速実行します!

実行するたびに、log.txtファイルに追記されていくのが分かりますね(^o^)

関数にして繰り返し使えるようにしておく

ログファイルへの出力は、コードの中で繰り返し使うので、関数化して呼び出して使えるようにしておくと便利です。

次のコードは、WriteLogというプロシージャを別で作ってログの書き出しを関数化しています。

※ファイル名とログに出力したい文字列を引数で渡すように指定

Sub sample()

    Dim FileName As String
    FileName = "log.txt"
    
    Call WriteLog(FileName, "処理開始")
    Dim i As Long
    For i = 0 To 10        
        Call WriteLog(FileName, i & ":" & "ひらちんの部屋")    
    Next

    Call WriteLog(FileName, "処理終了")

End Sub

Sub WriteLog(FileName As String, str As String)
    
    'ファイルを開く
    Open ThisWorkbook.Path & "\" & FileName For Append As #1
    
    'ファイルに書き込む
    Print #1, Now & ":" & str

    'ファイルを閉じる
    Close #1

End Sub

sampleプロシージャから、Callで呼び出して使っている様子をご覧下さい。

いい感じに出来ましたね(^o^)

コメント

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