Access FAQ

Accessの削除クエリとVBA実行の考え方

Accessを業務で使っていると、
必ず一度は「削除」という処理に向き合うことになります。

追加や更新と違い、
削除は一度実行すると元に戻せない処理です。
その削除を、さらにVBAから自動実行するとなると、
設計者にはより重い責任が発生します。

この記事では、

  • Accessの削除クエリとは何か
  • それをVBAから実行するとはどういう意味か
  • DoCmdとDAOをどう考えて使い分けるべきか

を、実務と設計の視点から整理します。


Accessにおける「削除」という処理の重さ

削除は「元に戻せない処理」である

Accessに限らず、
業務システムにおける削除は特別な処理です。

  • 追加はやり直せる
  • 更新は修正できる
  • しかし削除は「存在そのものを消す」

という決定的な違いがあります。

特にAccessは、

  • ロールバック機構が弱い
  • 操作が比較的簡単
  • 個人や部門単位で運用される

という特徴があるため、
削除事故が起きやすい環境でもあります。


なぜ削除処理は慎重に設計すべきなのか

削除処理の事故は、
多くの場合「悪意」ではなく、

  • 条件の指定ミス
  • 想定外のデータ増加
  • テストと本番の差

といった設計上の甘さから起きます。

特にVBAから削除を実行すると、
人の確認を介さず処理が進むため、
影響範囲は一気に広がります。


Accessの削除クエリとは何か

削除クエリの基本的な役割

Accessの削除クエリは、

  • 条件に一致したレコードを
  • テーブルから物理的に削除する

ためのクエリです。

SELECTクエリと同じように見えても、
実行された瞬間にデータが消える
という点が決定的に違います。


SELECTクエリとの決定的な違い

削除クエリは、

  • プレビューはできる
  • だが実行すると結果が残らない

という特徴があります。

SELECTクエリで
「ちゃんと絞れているから大丈夫」
と判断しても、
実行時には想定外の条件が含まれていることもあります。

この「確認できたつもり」になりやすい点が、
削除クエリの怖さです。


削除クエリをVBAから実行するということ

なぜVBAから削除クエリを実行するのか

削除クエリをVBAから実行する理由は、

  • 実行タイミングを制御したい
  • 条件を動的に変えたい
  • ユーザー操作と処理を分離したい

といった、システム化の要請です。

ここで重要なのは、
削除が「人の操作」から
「システムの判断」へ移るという点です。


クエリ単体実行との考え方の違い

手動で削除クエリを実行する場合、
実行者は結果を目視で確認できます。

しかしVBA実行では、

  • 実行者が意識しない
  • 条件が見えにくい
  • 実行結果を確認しない

という状態になりがちです。

つまり、
削除の責任が人から設計へ移る
ということになります。


DoCmdで削除クエリを実行する考え方

DoCmd.OpenQuery / RunSQLの位置づけ

DoCmdを使った削除は、

  • 保存された削除クエリを
  • Accessの操作として実行する

という考え方です。

Accessの画面操作を
VBAで自動化しているイメージに近く、
比較的Accessらしい方法です。


DoCmd実行で起きやすい問題

DoCmdによる削除では、

  • 確認メッセージが出る
  • 出ない設定にすると逆に危険
  • 削除件数を正確に把握しにくい

といった問題が起きやすくなります。

「実行できたかどうか」以上の
判断がしづらい点が弱点です。


DAOで削除処理を実行する考え方

DAO.Executeによる削除処理の特徴

DAO.Executeを使うと、

  • SQLを直接実行
  • 画面を介さず処理
  • 削除件数を取得可能

といった、
制御された削除処理が可能になります。

削除を「処理」として
扱いたい場合はこちらが適しています。


DAO削除で注意すべき点

DAOは強力ですが、
その分リスクも高まります。

  • 条件ミス=即全件削除
  • ユーザーの目に触れない
  • ログがなければ原因追跡不能

DAOで削除を行う場合は、

  • 条件の明示
  • 実行前チェック
  • ログやバックアップ

が前提になります。


削除クエリとVBA実行で起きやすい設計ミス

条件をVBAに寄せすぎる問題

削除条件をすべてVBAで組み立てると、

  • SQLが読めなくなる
  • クエリ定義が消える
  • 属人化が進む

という状態になります。

結果として、
誰も触れない削除処理が出来上がります。


「動いたからOK」という判断の危険性

削除処理は、

  • 一度成功すると
  • 次も大丈夫だと思いがち

ですが、
データ量や条件は必ず変化します。

「一度動いた」は、
安全の証明にはなりません


実務での削除処理の判断基準

削除クエリを使うべきケース

削除クエリが適しているのは、

  • 一時テーブル
  • 明確に不要な中間データ
  • 復元不要な処理結果

など、
業務的に価値がないデータに限られます。


削除以外を検討すべきケース

業務データの場合は、

  • 論理削除(フラグ管理)
  • 履歴テーブルへの退避
  • ステータス変更

といった方法を
まず検討すべきです。

「消さない設計」は、
後で必ず助けになります。


クエリ・VBA・業務設計のバランス

削除は「技術」ではなく「業務判断」

技術的に削除できることと、
業務的に削除してよいことは別です。

  • 誰が判断したのか
  • どこまで影響するのか
  • 後から説明できるか

ここまで考えて、
初めて削除処理になります。


長く使えるAccessに必要な考え方

長く使われるAccessシステムは、

  • 削除を怖がる
  • 消さなくて済む設計を選ぶ
  • 説明できる処理を持つ

という特徴があります。

削除クエリとVBA実行は、
Access設計の成熟度が最も出る部分です。


まとめ|削除クエリはVBA実行時こそ慎重に

削除クエリは便利ですが、
同時に最も危険な処理です。

  • VBA実行は人の目を外す
  • だからこそ設計が重要
  • 削除は最後の手段

システムキューブの「Accessの移行変換、mdb・adpのバージョンアップ」について

システム開発・ホームページ制作会社|株式会社システムキューブ