【Excel VBA】Accessのレコード削除【SQLのDELETEでできます】
Excel VBAでAccessのレコードを削除する方法をご紹介します。Excel VBAからSQL文のDELETEを使ってAccessのレコードを削除することができます。
はじめに
訪問ありがとうございます。この記事ではExcel VBAからAccessへ接続してレコードを削除する方法についてご紹介します。
Excel VBAでAccessのレコードを削除する方法がわかれば、Access VBAがわからなくてもExcel VBAでAccessのレコードを自由に削除することができます。
扱うデータ量が増えてきたり複数人が同時に作業する必要があるといった事情でAccessを使ってみたいと考えている方に参考になるかと思います。
この記事でわかること
- Excel VBAでSQL文を使ってAccessのレコードを削除する方法
目次
Accessのレコードを削除(Delete)
Accessのレコードを削除した結果からご紹介します。
削除前のAccessのテーブルです。
レコード削除前
テーブル『DB』の中のフィールド『ID』が『32』であるレコードを削除します。
レコードを削除した結果です。
レコード削除後
『ID』が『32』のレコードを削除できました。Excel VBAコードについて説明していきます。
Excel VBAコード
Accessのレコードを削除するExcel VBAコードです。
'Accessのレコードを削除する Sub Test5() Dim DBpath As String 'Accessファイルのフルパス Dim adoCn As Object 'Accessへ接続用のオブジェクト Dim strSQL As String 'SQL文 'Accessファイルへ接続する Set adoCn = CreateObject("ADODB.Connection") 'Accessへ接続用のオブジェクトを作成 DBpath = ThisWorkbook.Path & "\Database.accdb" '接続するAccessファイルのフルパス adoCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBpath & ";" 'Accessファイル(2007~)を開く 'adoCn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DBpath & ";" 'Access(~2003)ファイルを開く 'レコード削除のSQL文 strSQL = "DELETE FROM DB WHERE ID=32" '---変数を使う場合--- Dim ID ID = 38 'レコード削除のSQL文 strSQL = "DELETE FROM DB WHERE ID=" & ID '--------------------- 'SQLの実行(レコードの更新・追加・削除の場合) adoCn.Execute strSQL 'SQLを実行 '後処理 adoCn.Close 'Accessへの接続を解除する Set adoCn = Nothing 'Accessへの接続用のオブジェクトを開放 End Sub
少し長いですが、Acceesのレコードを削除するのに重要なところは赤色の部分です。
それ以外はテンプレみたいなものですので、あまり深く考える必要はありません。
オブジェクト作成(Accessへ接続)
これはお決まりでAccessへ接続するためのオブジェクトを作成します。
テンプレみたいなものです。
'Accessファイルへ接続する Set adoCn = CreateObject("ADODB.Connection") 'Accessへ接続用のオブジェクトを作成 DBpath = ThisWorkbook.Path & "\Database.accdb" '接続するAccessファイルのフルパス adoCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBpath & ";" 'Accessファイル(2007~)を開く 'adoCn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DBpath & ";" 'Access(~2003)ファイルを開く
ファイルパスの部分だけ接続するAccessファイルのフルパスへ変更します。
Accessのバージョンでコードが変わりますので、Access 2007以降とAccess2003以前のExcel VBAコードを載せておきます。
SQL文(DELETE)
ここが重要です。
Accessのレコードを削除するSQL文です。
'レコード削除のSQL文
strSQL = "DELETE FROM DB WHERE ID=32"
テーブル『DB』のフィールド『ID』が『32』であるレコードを削除する。という意味になります。
SQL文の中に変数を入れたい場合は次のようにします。
'変数を使う場合 Dim ID ID = 38 'レコード削除のSQL文 strSQL = "DELETE FROM DB WHERE ID=" & ID
エクセルのセルへ数式を使って文字列を入れる方法と一緒です。
SQL実行(レコード削除)
ここも重要です。
作成したSQL文を実行します。
'SQLの実行(レコードの更新・追加・削除の場合) adoCn.Execute strSQL 'SQLを実行
Accessのレコードの更新、追加、削除で共通のコードになります。
これでAccessのレコードを削除することができました。
後処理
あとはお決まりの後処理でAccessへの接続を解除してオブジェクトを開放したら終了です。
'後処理 adoCn.Close 'Accessへの接続を解除する Set adoCn = Nothing 'Accessへの接続用のオブジェクトを開放
これもあまり深く考えずコピペでいいかと思います。
おわりに
Excel VBAでSQLを使ってAccessへ接続してレコードを削除する方法をご紹介しました。
データベースを複数人で共有して同時に更新したい場合やデータ容量が増えてきた場合にAccessは便利です。
Accessをデータベースとして使う場合は、Accessの接続制限でファイルが壊れたり動かなくなってしまわないようにExcel VBAから接続する方法をおすすめします。
Excel VBAから接続する方法を使えば入出力フォームもExcel VBAで作成できるのでAccess VBAの知識がなくて簡単です。
参考になればと思います。最後までご覧くださいましてありがとうございました。
関連する記事から探す