PR

Accessで変更ログ(履歴)を記録する方法|初心者でも安心のステップ解説

Access
スポンサーリンク

こんにちは!なかぜんです。
業務でAccessを使っていて「誰がいつどんな変更をしたか分からない…」と困ったことはありませんか?
そんなときに役立つのが「変更ログ(履歴)の記録」機能です。
今回は、Access初心者の方でも安心して実装できるように、変更内容を自動で記録する方法をやさしく解説します。

スポンサーリンク

変更ログってなに?なぜ必要?

変更ログとは、データがいつ・誰によって・どのように変更されたかを記録する仕組みです。

変更ログを記録するメリット

  • 変更ミスの追跡ができる
  • 誰がいつ何を変更したか明確になる
  • トラブル発生時に原因を探しやすい

とくに複数人で同じデータベースを使っている場合には必須の機能ですね!

基本の考え方と構成

まず、以下のような構成で進めます:

  1. 変更ログを記録する専用テーブルを作成
  2. 対象フォームのBeforeUpdateイベントでVBAコードを記述

1. 変更ログ用のテーブルを作ろう

以下のような構成で「T_変更ログ」というテーブルを作成します。

フィールド名データ型内容
IDオートナンバー主キー
変更日日付/時刻変更が行われた日時
ユーザー名短いテキスト変更したユーザー名
テーブル名短いテキスト対象テーブル名
フィールド名短いテキスト変更されたフィールド
旧値短いテキスト変更前の値
新値短いテキスト変更後の値
レコードID数値型対象レコードのID

2. フォームのBeforeUpdateイベントでVBAを書く

対象フォームの「BeforeUpdate」イベントに、変更ログを書き込む処理を追加します。

サンプルコード

Private Sub Form_BeforeUpdate(Cancel As Integer)
    Dim ctl As Control
    Dim strOldValue As String
    Dim strNewValue As String
    Dim db As DAO.Database
    Dim rs As DAO.Recordset

    Set db = CurrentDb

    For Each ctl In Me.Controls
        If ctl.ControlType = acTextBox Then
            If Nz(ctl.Value, "") <> Nz(ctl.OldValue, "") Then
                Set rs = db.OpenRecordset("T_変更ログ", dbOpenDynaset)
                rs.AddNew
                rs!変更日 = Now()
                rs!ユーザー名 = Environ("Username")
                rs!テーブル名 = "T_商品" ' 対象テーブル名を指定
                rs!フィールド名 = ctl.Name
                rs!旧値 = ctl.OldValue
                rs!新値 = ctl.Value
                rs!レコードID = Me!ID ' 主キーのフィールド名を指定
                rs.Update
                rs.Close
            End If
        End If
    Next ctl

    Set rs = Nothing
    Set db = Nothing
End Sub

ポイント解説

  • Environ(“Username”)でWindowsログイン名を取得
  • ctl.OldValueは変更前の値、ctl.Valueは現在の値
  • 対象のフォーム上のテキストボックスのみ処理対象としています

注意点とよくあるミス

  • Me!IDなど主キーがNullの場合、ログ記録に失敗することがあります。保存済みレコードに対して使いましょう。
  • 複数人で使用する場合、ログテーブルにロックがかからないよう排他制御を検討しましょう。
  • ログテーブルが肥大化するので、定期的なバックアップや古いログの整理が必要です。

応用ポイント(中級者向け)

中級者の方には、以下の応用もおすすめです:

  • 削除ログの追加:フォームの「Delete」イベントに対応
  • SQLログ記録:クエリ実行前後にログを残す
  • ログ専用のフォーム:「誰が何を変更したか」を確認できる管理画面の作成

まとめ:できたこと&次のステップ

今回は、Accessで変更ログを自動的に記録する方法を紹介しました。
業務で使える実用的な仕組みとして、ぜひ取り入れてみてください!

今回の学び

  • ログ記録の重要性を理解できた
  • BeforeUpdateイベントを使った実装方法を学んだ
  • VBAでのレコード追加方法が身についた

次のステップ案内

次回は、「削除されたデータを記録する方法」や、「ログデータを分析するためのクエリの作成」など、さらに実用性の高い内容をご紹介する予定です!
お楽しみに♪

それでは、なかぜんでした!

bookfan 1号店 楽天市場店
¥2,992 (2025/05/05 08:01時点 | 楽天市場調べ)
\楽天ポイント4倍セール!/
楽天市場
\商品券4%還元!/
Yahooショッピング