VBAでファイルを作成する際、毎回新しいファイルとして上書きするのではなく、「既存のファイルに新しいデータをどんどん付け加えていきたい」という場合があります。典型的な例が、操作ログやデータ収集の記録です。
この記事では、VBAでファイルを**「追記モード」で開くOpen For Append
**の使い方を、具体的なサンプルコードを交えて解説します。
VBAコードの設置場所に関する注意
今回のコードは、セルの値が変更されたときに自動で実行される「イベントマクロ」です。そのため、通常の「標準モジュール」ではなく、「シートモジュール」に記述する必要があります。
- Excelで
Alt
+F11
キーを押し、VBE(Visual Basic Editor)を開きます。 - 画面左側の「プロジェクトエクスプローラー」から、ログを記録したいシート(例:
Sheet1
)をダブルクリックします。 - 表示された右側の白いコードウィンドウに、以下のコードを貼り付けてください。
完成した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
のようなイベントと組み合わせることで、ユーザーの操作をトリガーとした強力な自動記録の仕組みを構築できます。