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

VBAでファイルを作成する際、毎回新しいファイルとして上書きするのではなく、「既存のファイルに新しいデータをどんどん付け加えていきたい」という場合があります。典型的な例が、操作ログやデータ収集の記録です。

この記事では、VBAでファイルを**「追記モード」で開くOpen For Append**の使い方を、具体的なサンプルコードを交えて解説します。


目次

VBAコードの設置場所に関する注意

今回のコードは、セルの値が変更されたときに自動で実行される「イベントマクロ」です。そのため、通常の「標準モジュール」ではなく、「シートモジュール」に記述する必要があります。

  1. Excelで Alt + F11 キーを押し、VBE(Visual Basic Editor)を開きます。
  2. 画面左側の「プロジェクトエクスプローラー」から、ログを記録したいシート(例:Sheet1)をダブルクリックします。
  3. 表示された右側の白いコードウィンドウに、以下のコードを貼り付けてください。

完成したVBAコード

以下が、シートモジュールに記述する完成版のコードです。元のコードにあったタイプミスを修正し、より実用的なログになるようタイムスタンプの記録と、安全なファイル操作のためのFreeFileを追加しています。

Private Sub Worksheet_Change(ByVal Target As Range)

    ' 変数を宣言します
    Dim logFilePath As String
    Dim fileNum As Integer
    Dim changedCell As Range

    ' ログファイルの名前とパスを指定します
    logFilePath = ThisWorkbook.Path & "\change_log.txt"
    
    ' 空いているファイル番号を取得します
    fileNum = FreeFile
    
    ' 指定したファイルを「追記モード(Append)」で開きます
    Open logFilePath For Append As #fileNum
    
    ' 変更されたセルが複数ある場合も想定し、ループ処理を行います
    For Each changedCell In Target
        ' 「日時、セル番地、変更後の値」をタブ区切りでファイルに書き込みます
        Print #fileNum, Now() & vbTab & changedCell.Address(False, False) & vbTab & changedCell.Value
    Next changedCell
    
    ' ファイルを閉じます
    Close #fileNum

End Sub

コードのポイント解説

① Worksheet_Changeイベント

Private Sub Worksheet_Change(ByVal Target As Range)

これは特別なSubプロシージャで、このコードが書かれているワークシート上でセルの値が変更されたときに、自動的に実行されます。引数のTargetには、変更が加えられたセル(範囲)の情報が格納されています。

② Open For Appendモード

Open logFilePath For Append As #fileNum

これが今回の最重要ポイントです。ファイルをOpenする際のモードとしてFor Appendを指定すると、ファイルは追記モードで開かれます。これにより、既存の内容は消さずに、ファイルの末尾から新しいデータを書き加えることができます。もしファイルが存在しない場合は、新規に作成されます。

③ 変更されたセルをループ処理

For Each changedCell In Target

ユーザーが複数のセルを一度に貼り付けた場合など、Targetには複数のセルが含まれることがあります。そのためFor Eachループを使い、変更されたセルを一つずつ確実に取り出して処理しています。

④ ログ情報の書き込み

Print #fileNum, Now() & vbTab & changedCell.Address(False, False) & vbTab & changedCell.Value

Print #を使い、ファイルに情報を書き込みます。ここでは、以下の3つの情報をタブ文字(vbTab)で区切って記録しています。

  • Now(): 変更が加えられた現在の日時
  • changedCell.Address(False, False): セルの番地(例: B5
  • changedCell.Value: セルに入力された新しい値

実行結果のサンプル

上記のコードをシートに設定した後、セルをいくつか編集すると、Excelファイルと同じフォルダにchange_log.txtというファイルが作成されます。ファイルの中身は以下のようになります。

2025/08/09 11:50:38	B3	商品A
2025/08/09 11:50:45	C5	1500
2025/08/09 11:50:51	B3	商品B

セルを編集するたびに、新しいログがファイルの末尾にどんどん追加されていくのが分かります。


まとめ

既存のファイルにデータを付け足したい場合は、Open "ファイル名" For Append As #ファイル番号という構文を使います。

このAppendモードは、今回のような操作ログの記録だけでなく、複数の処理結果を一つのファイルに蓄積していく場合など、様々な場面で役立ちます。特にWorksheet_Changeのようなイベントと組み合わせることで、ユーザーの操作をトリガーとした強力な自動記録の仕組みを構築できます。

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

この記事を書いた人

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

目次