大体でIT

-ちょっと使えるネタを紹介-

大体でIT

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のテーブルです。

レコード削除前

Accessのレコードを削除する前

テーブル『DB』の中のフィールド『ID』が『32』であるレコードを削除します。

レコードを削除した結果です。

レコード削除後

Accessのレコードを削除した後

『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の知識がなくて簡単です。

参考になればと思います。最後までご覧くださいましてありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

アーカイブから探す