マクロを実行するたびに、その実行記録や結果を一つのログファイルにどんどん書き足していきたい、という場合があります。ファイルを新規作成するのではなく、既存のファイルの内容は保持したまま、末尾に新しいデータを追記していく必要があります。
FileSystemObject (FSO)
の**OpenTextFile
メソッド**を「追記モード」で利用することで、この処理を簡単かつ安全に実現できます。
この記事では、既存のテキストファイルに新しい行を追加していく基本的な方法を解説します。
【準備】参照設定
FSOを快適に利用するため、VBAエディタでツール
> 参照設定
を開き、**「Microsoft Scripting Runtime」**にチェックを入れておくことを推奨します。
完成したVBAコード
以下は、マクロブックと同じフォルダにある「ActionLog.txt」というファイルに、マクロを実行した日時を追記していくVBAコードです。
'参照設定: Microsoft Scripting Runtime
Sub AppendLogToFile()
' 変数を宣言します
Dim fso As New FileSystemObject
Dim textStreamObj As TextStream
Dim filePath As String
'--- 設定 ---
' 追記したいテキストファイルのパス
filePath = ThisWorkbook.Path & "\ActionLog.txt"
'--- 設定ここまで ---
'--- 1. 追記モード(ForAppending)でテキストファイルを開く ---
' 第3引数(Create)をTrueにすると、ファイルが存在しない場合に新規作成します
Set textStreamObj = fso.OpenTextFile(Filename:=filePath, IOMode:=ForAppending, Create:=True)
'--- 2. TextStreamオブジェクトを使い、ファイルに新しい行を書き込む ---
With textStreamObj
' .WriteLine で、末尾に新しい行を追加
.WriteLine "マクロが実行されました。 - " & Now()
' .Close を実行した時点で、ファイルへの書き込みが確定します
.Close
End With
' オブジェクトを解放
Set textStreamObj = Nothing
Set fso = Nothing
MsgBox "ログファイルに新しい記録を追記しました。"
End Sub
このマクロを実行するたびに、「ActionLog.txt」の末尾に新しい行が追加されていきます。
コードのポイント解説
OpenTextFile
メソッド
Set myStream = fso.OpenTextFile(Filename, IOMode, [Create])
OpenTextFile
は、既存のテキストファイルを開き、それを操作するためのTextStream
オブジェクトを返します。
IOMode
引数(最重要)
この第2引数IOMode
が、ファイルの開き方を決定します。追記するためには、以下の定数を指定します。
定数 | 値 | 説明 |
ForReading | 1 | 読み取り専用で開きます。 |
ForWriting | 2 | 書き込み用に開きます(注意:既存の内容はすべて消去され、上書きされます)。 |
ForAppending | 8 | 追記用に開きます。ファイルポインタが自動的に末尾に移動します。 |
IOMode:=ForAppending
(または数宇の8
)を指定することで、既存のファイル内容を消すことなく、末尾から新しいデータを書き込むことができます。
Create
引数 (任意)
第3引数Create
をTrue
に設定しておくと、もし指定したパスにファイルが存在しない場合に、自動で新しい空のファイルを作成してくれます。ログファイルの初回作成時などに便利です。
まとめ
FSOを使って既存のテキストファイルにデータを追記する手順は、以下の通りです。
fso.OpenTextFile("パス", ForAppending)
を使い、ファイルを「追記モード」で開いてTextStream
オブジェクトを取得する。TextStream
オブジェクトの.WriteLine
メソッドで、新しい行を書き込む。- 最後に、必ず
.Close
メソッドでファイルを閉じて、書き込みを確定させる。
この方法は、マクロの実行ログを記録したり、複数の処理結果を一つのファイルに蓄積したりと、様々な場面で応用できる非常に実用的なテクニックです。