【ExcelVBA】ExcelのマクロからSQLiteのテーブルデータを削除するには

この記事では、ExcelのマクロからSQLiteのテーブルデータを削除する方法についてご説明します。

【動画】ExcelのマクロからSQLiteのテーブルデータを削除する実際の動き

本題に入る前に、まずは次の動画をご覧ください。


Connectionインスタンスの生成してSQLiteのデータベースへの接続情報を用意したらConnectionインスタンスのConnectionStringプロパティに代入し、Openメソッドを実行することで、マクロがSQLiteのデータベースに接続しています。

マクロがSQLiteのデータベースに接続したらSQLのDELETE文を実行し、Excelのセルに入力された値を条件に対象のSQLiteのテーブルデータを削除しています。

マクロ作成の流れ

STEP.1
Connectionインスタンスを生成する
Connectionインスタンスを生成します。
STEP.2
SQLiteへの接続情報を取得する
SQLiteへの接続情報を取得します。
STEP.3
STEP.2の接続情報をOpenメソッドの引数に指定してOpenメソッドを実行する
STEP.2の接続情報をOpenメソッドの引数に指定してOpenメソッドを実行します。
実行すると、ExcelのマクロがSQLiteのデータベースに接続されます。
STEP.4
SQLのDELETE文を実行する
SQLのDELETE文を実行します。
正常に処理が実行されると、削除対象のSQLiteのテーブルデータが削除されます。

ExcelファイルとSQLiteのテーブルデータの例

今回は次のExcelファイルを用意しました。

また、SQLiteのテーブルデータは次の通りです。

テーブルにデータが11件存在しています。

今回はこのテーブルデータを、Excelのセルに入力された値を条件にマクロが対象データを削除します。

削除された結果は下の画面の通りです。

Excelには項番が11と入力されていたので、id(項番)が11のデータが削除されました。

コードの例

Option Explicit

Private Sub btn_exec_Click()

    Dim cn          As ADODB.Connection     'Connection用変数
    Dim sqlStr      As String               'SQL用変数
    Dim ws          As Worksheet
    
    'シートを取得する
    Set ws = Worksheets("work")
        
    'Connectionインスタンスの生成
    Set cn = New ADODB.Connection
    
    'SQLiteへの接続情報を取得する
    cn.ConnectionString = "DRIVER=SQLite3 ODBC Driver;Database=" & _
                            ws.Range("dbName").Value
                          
    'コネクションを開く
    cn.Open
        
    'DELETE文を用意する(Excelのシートに入力された値を条件に、合致するデータを削除する)
    sqlStr = "DELETE FROM syain"
    sqlStr = sqlStr & " WHERE ID = " & CLng(ws.Range("valID").Value)
        
    'DELETE文を実行する
    cn.Execute sqlStr
    
    '後処理
    cn.Close
        
End Sub

注目すべきコード①

最初に見て頂きたいのは13行目です。

    'Connectionインスタンスの生成
    Set cn = New ADODB.Connection

コードの説明

以上のコードは、マクロがSQLiteのデータベースに接続するための接続情報を取得して接続するコードです。

このインスタンスがないとマクロがSQLiteのデータベースに接続することができないので必ず生成しておきます。

注目すべきコード②

次に見て頂きたいのは16行目から17行目です。

    'SQLiteへの接続情報を取得する
    cn.ConnectionString = "DRIVER=SQLite3 ODBC Driver;Database=" & _
                            ws.Range("dbName").Value

コードの説明

以上のコードは、マクロがSQLiteのデータベースに接続するための接続情報を用意するコードです。

接続情報のDriverには、マクロがSQLiteのデータベースに接続するのに必要なODBCドライバーの情報を指定します。

「SQLite3 ODBC Driver」は下のODBC データソースアドミニストレーター上で表示されているSQLiteのドライバの名前を指定します。

また、SQLiteのデータベースファイルのフルパスも指定します。

今回はB2のセル(今回はセルの名前を「dbName」としています)を接続情報で指定しています。

注目すべきコード③

次に見て頂きたいのは20行目です。

    'コネクションを開く
    cn.Open

コードの説明

以上のコードは、ConnectionインスタンスのOpenメソッドを実行して、マクロがSQLiteのデータベースに接続する処理のコードです。

Connectionインスタンスには「注目すべきコード②」で説明した通り、マクロがSQLiteのデータベースに接続するための接続情報をConnectionStringプロパティに代入しているので、ここではOpenメソッドを実行することでマクロがSQLiteのデータベースに接続されます。

注目すべきコード④

次に見て頂きたいのは23行目から24行目です。

    'DELETE文を用意する(Excelのシートに入力された値を条件に、合致するデータを削除する)
    sqlStr = "DELETE FROM syain"
    sqlStr = sqlStr & " WHERE ID = " & CLng(ws.Range("valID").Value)

コードの説明

以上のコードは、Excelのセルに入力された値を条件に、該当するSQLiteのテーブルデータを削除するDELETE文を組み立てているコードです。

Excelのセルの値がsyainテーブルのIDの値と合致するレコードを削除します。

以上のコードだけではDELETE文が分かりにくいと思うので、実際に実行するDELETE文をサンプルで以下にお見せします。

DELETE文(サンプルのExcelのシートに入力された値を条件に、合致するデータを削除する)
DELETE
FROM
    syain
WHERE
    ID = 11

注目すべきコード⑤

次に見て頂きたいのは27行目です。

    'DELETE文を実行する
    cn.Execute sqlStr

コードの説明

以上のコードは、DELETE文をマクロがSQLite側で実行するよう要求し実行する処理のコードです。

ConnectionインスタンスのExecuteメソッドにDELETE文を引数に指定し実行することでSQLite側でDELETE文が実行されます。

動作確認

ExcelファイルとSQLiteのテーブルデータの例」をご覧ください。

【注意】参照設定が必要です

一つ注意点があるのですが、先ほどのコードを動かすには参照設定が必要です。

参照設定の一覧(下の画像を参考)から次の項目(ライブラリ)にチェックを付けて「OK」ボタンをクリックします。

  1. Microsoft ActiveX Data Objects 2.8 Library(msado28.tlb)

なぜ必要かというと、Excelのマクロのコードの5行目の「ADODB.Connection」というオブジェクトが「msado28.tlb」というファイルを参照するからです。

    Dim cn          As ADODB.Connection     'Connection用変数

この参照設定をしないと下の画像のエラーが出ますので必ず行う必要があります。

ここでは「msado28.tlb」とは何者かについては記事の本題から逸れてしまうので詳細は割愛しますが、マクロで「ADODB.Connection」というオブジェクトを使う場合は参照設定しないと動かない、程度に思って頂ければと思います。

最後に

この記事では、ExcelのマクロからSQLiteのテーブルデータを削除する方法についてご説明しました。

ExcelのマクロからSQLiteのテーブルデータを削除したいときは本記事を参考にしてみてくださいね。

プログラミングのスキルを習得するなら

プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。

プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。

→ TechAcademyの「1週間 無料体験」はこちら