Accessでデータベースを構築した後、VBAで処理を効率よくレコードを削除するためにSQL文を活用することができます。
レコードを追加するためのSQL文については以下の記事で紹介していますのでご参照ください。
また、SQL文の言語については以下の書籍を参考にしていただければと思いますが、今回はレコードの削除として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に示すとおりです。
まとめ
今回は、VBAを用いてDELETE文によるレコード削除の方法を紹介しました。サンプルではあいまい検索を用いて、特定の文字列を含むレコードを削除しましたが、変数を設定することもでき、データ処理のプロセスに応じて実装していくことで業務効率の改善を図ることもできますので、本記事を参考にしていただければと思います。
紹介した内容は専門書などでも説明がありますので、是非ご参考になさってください。
スポンサーリンク
コメント