Accessでデータベースを構築した後、VBAで処理を効率よくレコードを削除するためにSQL文を活用することができます。
AccessでSQLを使ってレコードを削除する場合は、DELETE文を使用します。
基本形は「DELETE FROM テーブル名 WHERE 条件」です。
この記事では、AccessでDELETE文を実行する基本方法から、条件を指定したレコード削除、VBAからSQLを実行する方法まで具体例を使って解説します。
特にDELETE文は、WHERE句を指定しないと対象テーブルのレコードが広範囲に削除されるため、実行前の条件確認が重要です。
それでは、DELETE文を用いた処理の例を含めて見ていきましょう。
DELETE文について
DELETE文は、指定したテーブルからデータを削除するために用います。具体的には次のような記載をすることで、対象テーブル内の全てのレコードを削除することができます。
DELETE FROM テーブル名;
また、WHERE句を使うことで特定のレコードだけを削除することができます。
DELETE FROM テーブル名 WHERE句;
以上を踏まえて、サンプルテーブルにDELETE文を用いてデータを削除する方法を見ていきましょう。
サンプルテーブルの作成・DELETE文の例
サンプルテーブルとして「T_sample」テーブルを用意します。続いて、「氏名」と「生年月日」フィールドを追加し、それぞれのデータ型は「短いテキスト」と「日付/時刻型」とします。
そして表1に示すようにサンプルデータを登録します。
表1 サンプルデータ
| 氏名 | 生年月日 |
| 山田 一郎 | 2000/04/01 |
| 佐藤 太郎 | 1975/03/01 |
| 下田 一樹 | 1984/06/24 |
| 武藤 祐美 | 1970/08/28 |
| 古川 斎 | 2005/03/17 |
| 土田 竹一 | 1979/07/20 |
| 岩田 れいや | 1998/05/04 |
今回は、DELETE文で氏名フィールドのあいまい検索をし「山田」を含むレコードを削除する処理を設定します。このとき、SQL文は次のように記載することができます。
DELETE FROM T_sample WHERE 氏名 Like ‘*山田*’;
これで、DELETE文を用いてレコードからデータを削除するための準備が整いました。次からは、作成したSQL文をどのようにVBAで動かすかを見ていきましょう。
VBAによるSQL文の実装
VBAには「DoCmd」オブジェクトが用意されており、これを用いることで簡単にDELETE文の処理ができます。
具体的に次のコードを標準モジュールに実装してください。
Private Sub DeleteSQL()
'変数宣言
Dim mySQL As String
'変数に実行するSQL文を格納する。
mySQL = "DELETE FROM T_sample WHERE 氏名 Like '*山田*';"
'DoCmd.RunSQLメソッドを用いてSQL文を実行する。
DoCmd.RunSQL mySQL
End Sub
DoCmdオブジェクトでDELETE文を実行するためには、RunSQLメソッドを使用します。RunSQLメソッドでは実行するSQL文を引数に指定します。そのため、「mySQL」変数にSQL文をテキスト形式で格納し、これをRunSQLメソッドの引数とします。
「mySQL」変数には、先に紹介したDELETE文の記載方法に則った内容を格納しています。
これで、一通りの処理に対する実装ができましたので、VBAを実行して処理結果を確認しましょう。
VBAの実行
作成したVBAによる処理を実行してみましょう。
「T_sample」テーブルには複数のレコードが入っていますが、VBAで実装した処理を実行すると図1のように氏名フィールドに「山田」を含むレコードが抽出され、これらレコードを削除するための確認ボックスが表示され、「はい」を選択すると対象レコードが削除されます。
一連の流れは図1に示すとおりです。

削除クエリとDELETE文はどちらを使う?
Accessでは、クエリのデザイン画面から削除クエリを作成する方法と、DELETE文を直接実行する方法があります。
画面上で削除条件を確認しながら処理したい場合は削除クエリが分かりやすく、VBAによる定型処理や自動処理の中で削除を実行したい場合はDELETE文が便利です。
Accessの削除クエリを使った方法については、次の記事で詳しく解説しています。

レコードを追加する場合はINSERT文
DELETE文が「レコードを削除するSQL」であるのに対して、新しいレコードをテーブルへ追加するときにはINSERT INTO文を使用します。
Access VBAからデータの追加・削除を自動化したい場合は、DELETE文と合わせてINSERT文も理解しておくと便利です。

VBAでSQLをさらに活用する
SQLを使ったデータ操作をさらに自動化したい場合は、ADOを利用する方法もあります。
SELECT文を使ったデータ取得については、次の記事で具体的に解説しています。

まとめ
今回は、VBAを用いてDELETE文によるレコード削除の方法を紹介しました。サンプルではあいまい検索を用いて、特定の文字列を含むレコードを削除しましたが、変数を設定することもでき、データ処理のプロセスに応じて実装していくことで業務効率の改善を図ることもできますので、本記事を参考にしていただければと思います。
紹介した内容は専門書などでも説明がありますので、是非ご参考になさってください。
スポンサーリンク


コメント