【Excel VBA】FSOで既存のテキストファイルにデータを追記する方法 (OpenTextFile)

マクロを実行するたびに、その実行記録や結果を一つのログファイルにどんどん書き足していきたい、という場合があります。ファイルを新規作成するのではなく、既存のファイルの内容は保持したまま、末尾に新しいデータを追記していく必要があります。

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が、ファイルの開き方を決定します。追記するためには、以下の定数を指定します。

定数説明
ForReading1読み取り専用で開きます。
ForWriting2書き込み用に開きます(注意:既存の内容はすべて消去され、上書きされます)。
ForAppending8追記用に開きます。ファイルポインタが自動的に末尾に移動します。

IOMode:=ForAppending(または数宇の8)を指定することで、既存のファイル内容を消すことなく、末尾から新しいデータを書き込むことができます。

Create 引数 (任意)

第3引数CreateTrueに設定しておくと、もし指定したパスにファイルが存在しない場合に、自動で新しい空のファイルを作成してくれます。ログファイルの初回作成時などに便利です。


まとめ

FSOを使って既存のテキストファイルにデータを追記する手順は、以下の通りです。

  1. fso.OpenTextFile("パス", ForAppending) を使い、ファイルを「追記モード」で開いてTextStreamオブジェクトを取得する。
  2. TextStreamオブジェクトの .WriteLine メソッドで、新しい行を書き込む。
  3. 最後に、必ず .Close メソッドでファイルを閉じて、書き込みを確定させる。

この方法は、マクロの実行ログを記録したり、複数の処理結果を一つのファイルに蓄積したりと、様々な場面で応用できる非常に実用的なテクニックです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次