Office 2019 Access 2019

削除後のレコードを自動で指定テーブルへ保存するデータマクロ

投稿日:2022年5月18日 更新日:

Accessには、テーブルで行った削除や追加、更新などの実行時に、設定した処理を自動で実行してくれる[データマクロ]というのがあります。

この機能を使って、削除したレコードを[削除テーブル]へ自動で保存することができます。

データマクロは、Access2010以降の機能です。

データマクロの[削除後処理]

参考ここでは[ドキュメントウィンドウオプション]で[タブ付きドキュメント](既定)を選択しています。[ウィンドウを重ねて表示する]と[タブ付きドキュメント]の違いについては、以下の記事で解説しています。

[タブ付きドキュメント]と[ウィンドウを重ねて表示する]の違い

Access2007以降、オブジェクトを表示すると、タブ付きウィンドウで表示されるようになっています。従来からAccessを使用している方に ...

続きを見る

削除したレコードを保存するテーブルを作成

商品マスターとして、以下のようなテーブル[T_商品]を作成しています。

マスターテーブル[T_商品]

以下は、デザインビューです。

テーブル[T_商品]のデザインビュー

マスターテーブルをコピーして削除テーブルを作成

削除したレコードを保存するテーブルを作成します。

マスターテーブル[T_商品]をコピーします。

[ホーム]タブの[コピー]ボタン

貼り付けを実行すると、[テーブルの貼り付け]ダイアログボックスが表示されますので[テーブル構造のみ]を選択します。

テーブルに名前を付けて[OK]ボタンをクリックします。

ここでは、[T_生産停止商品]という名前にします。

[テーブルの貼り付け]ダイアログボックス

テーブル[T_生産停止商品]をデザインビューで開き、以下のように変更します。

フィールド名[生産停止ID](オートナンバー型)と、[生産停止日](日付/時刻型)を追加します。

マスターテーブル[T_商品]と同じフィールドには、同じデータ型を指定します。

テーブル[T_生産停止商品]のデザインビュー

これで空っぽの[T_生産停止商品]ができました。以下は、テーブル[T_生産停止商品]のデータシートビューです。

このテーブルにマスターテーブル[T_商品]で削除されたレコードを保存していきます。

テーブルは保存して閉じておきます。

テーブル[T_生産停止商品]のデータシートビュー

参考[テーブルの貼り付け]ダイアログボックスについては、以下の記事で解説しています。

テーブル・クエリなどのオブジェクトをコピーして活用する

Accessの1つのデータベース内でテーブルやクエリ、フォーム、レポートなどのオブジェクトをコピーする方法です。 コピーボタンや貼り付けボタ ...

続きを見る

[削除後処理]のデータマクロを作成

マスターテーブル[T_商品]表示します。

データシートビューでも、デザインビューでもかまいません。

データシートビュー/デザインビューで操作

データシートビューであれば、[テーブル]タブの[イベント後]グループにある[削除後処理]をクリックします。

削除後処理

レコードが削除された後に実行するロジックを作成します。

[Old].[Field Name] を使用して、レコードが削除される前のフィールドの値を検査します。

[テーブル]タブの[イベント後]グループにある[削除後処理]

デザインビューで操作する場合は、[テーブルデザイン]タブの[フィールド/レコード/テーブルのイベント]グループにある[データマクロの作成]から[削除後処理]をクリックします。

[テーブルデザイン]タブの[データマクロの作成]-[削除後処理]

データマクロアクション[レコードの作成]を選択

[新しいアクションの追加]の▼ボタンをクリックして、アクションの一覧から[レコードの作成]を選択します。

アクションの一覧から[レコードの作成]を選択

[レコードの作成]アクションになります。

[レコードの保存先]は、プルダウンから[T_生産停止商品]を選択します。

[レコードの保存先]に[T_生産停止商品]を指定

すぐ下にある[新しいアクションの追加]をクリックします。

プルダウンから[フィールドの設定]を選択します。

注意[新しいアクションの追加]が2個並んでいますが、[レコードの保存先]アクションの中にある[新しいアクションの追加]を選択します。

アクション[レコードの作成先]で[フィールドの設定]を選択

[フィールドの設定]の[名前]には、以下のように入力します。[テーブル名]は、保存先のテーブル名です。

[テーブル名] の後ろは、[!](エクスクラメーション)でも構いません。

[テーブル名].[フィールド名]

ここでは、以下のようになります。

[T_生産停止商品].[商品コード]

フィールドの設定の[名前]に入力

[フィールドの設定]の[値]には、以下のように入力します。

[Old].[フィールド名]

[o]まで入力すると、入力補助メニューが表示されますので、選択すると効率的です。

フィールドの設定[値]の入力

[Old]の後ろは、[.](ドット)を入力します。すると、また入力補助メニューが表示されますので、[商品コード]を選択します。

[フィールドの設定]の[値]入力時の補助メニュー

[値]は、以下のようになります。

[Old].[商品コード]

[フィールドの設定]の[値]の入力完成

続けて、フィールドの設定を追加します。

[新しいアクションの追加]のプルダウンから[フィールドの設定]を選択します。

この時もすぐ下の[新しいアクションの追加]を選択します。間違えないようにしてください。

[レコードの作成先]アクションにアクションを追加

フィールドの設定は以下のように設定します。

2つの[フィールドの設定]を完成

最後に、生産停止日を自動で入力したいので、[フィールドの設定]を選択して、名前にテーブル[T_生産停止商品]の[生産停止日]を指定します。

[T_生産停止商品].[生産停止日]

[値]には、以下のように入力します。時間まで表示したいのであれば、[Now()]にしてください。

Date()

[フィールドの設定]にDate関数を入力

削除テーブルに保存したいフィールドが多い場合は、少し大変かもしれませんが工夫してやってみてください。

マクロアクションの設定が完了したら、上書き保存して、マクロウィンドウは閉じます。

マクロウィンドウの[上書き保存]と[閉じる]ボタン

データマクロ[削除後処理]の動作確認

動作を確認してみます。

マスターテーブル[T_商品]を表示します。

1つのレコードを選択して、削除します。

マスターテーブルでレコードを削除

テーブル[T_生産停止商品]を表示すると、削除したレコードが追加されています。

テーブル[T_生産停止商品]に削除したレコードが追加

もし、両方のテーブルを起動しているのであれば、[ホーム]タブの[レコード]グループにある[すべて更新]をクリックしてみてください。

[ホーム]タブの[レコード]グループにある[すべて更新]

参考テストとして、レコードを削除して動作を確認した後、オートナンバーを振り直す場合は、以下の方法が簡単です。

オートナンバー型の番号の振り直し(切り取りと貼り付けでリセット)

Accessのテーブルでフィールドのデータ型を[オートナンバー型]にして、レコードを削除すると、そのレコードは欠番になります。 以下のテーブ ...

続きを見る

もしくは、レコードをすべて削除して最適化を実行すると、振り直されます。

ファイルサイズが大きくなってしまったら[最適化と修復]を実行

Accessのデータベースファイルは、使用していくうちに容量が大きくなっていきます。オブジェクトを編集したり、削除したりする操作を繰り返して ...

続きを見る

データマクロ[削除後処理]のアクション編集

データマクロの完成後に、フィールドを追加したい場合などは修正することができます。

データマクロの設定をした後は、[テーブル]タブの[イベント後]グループの[削除後処理]ボタンの色が変わっていますので、分かりやすいと思います。

クリックすると、マクロウィンドウが表示されます。

[テーブル]タブの[イベント後]グループの[削除後処理]ボタン

もちろん、デザインビューからも表示できます。

[データマクロ]-[削除後処理]をクリックします。

デザインビューの[データマクロ]-[削除後処理]

フィールドの設定を削除する場合は、各フィールドの設定の[削除]ボタンをクリックします。

レコードの作成先のフィールドの設定をしない場合は、空白になります。

マクロウィンドウのフィールドの設定の[削除]ボタン

アクション[レコードの作成]を削除する場合は、アクションの[削除]ボタンをクリックします。

マクロウィンドウのアクションの[削除]ボタン

参考削除クエリを作成した場合も、データマクロを作成しておくと安心ですね。

削除クエリの作成(すべてのレコード/条件を指定したレコード)

Accessでテーブルのすべてのレコードを削除するには、すべてのレコードを選択して削除する方法もありますが、削除クエリを作成して簡単に削除す ...

続きを見る

以下の記事では、データマクロ[更新後処理]を使って更新履歴をテーブルへ保存する方法を解説しています。

更新日時を指定テーブルやフィールドへ自動で保存するデータマクロ

Accessのテーブルのデータを処理するためのマクロのことを[データマクロ]と呼びます。 テーブルで行った削除や追加、更新などの実行時に、設 ...

続きを見る

検索

ほかの記事も検索してみませんか?

Profile

執筆者/はま

-Office 2019 Access 2019

Copyright © 2001-2022 初心者のためのOffice講座 All Rights Reserved.

Copyright© 初心者のためのOffice講座 , 2022 AllRights Reserved Powered by AFFINGER4.