【VBA】SQLiteのデータを取得してシートへ設定する【列名も設定】

例えば
 ・SQLite上の
 ・テーブル「employee」のデータを取得
して、

SQLite上のテーブル「employee」のデータ
SQLite上のテーブル「employee」のデータ

シート上へ設定できます!
※列名も含む。

実行結果
実行結果

ここではVBAから
 ・「QueryTableオブジェクト(=クエリと接続)」
を使用して取得する方法を記載します!

クエリと接続
クエリと接続
PR

前提

・SQLiteがインストールされていること。
・SQLite ODBC Driverがインストールされていること。

SQLite ODBC Driverは以下で取得できます。
※「sqliteodbc.exe」または「sqliteodbc_w64.exe」をダウンロードしてインストールしてください。
※「sqliteodbc.exe」32bit用です。
※「sqliteodbc_w64.exe」は64bit用です。


PR

VBAコード

ここでは例として、
 ・デスクトップ上のSQLiteファイル「sampleDB.db」の
 ・テーブル「employee」のデータを取得して
 ・新規作成したシート「data」へ設定
します。

Option Explicit

Sub sample()
    
    Dim dataSheeName As String
    Dim sheet As Worksheet
    Dim dataSheet As Worksheet
    Dim dbName As String
    Dim sql As String
    Dim conStr As String
    Dim n As Name

    'SELECT文の結果を設定するシート名
    dataSheeName = "data"
    'DB名(SQLiteのファイル名)
    dbName = "C:\Users\user\Desktop\sampleDB.db"
    'SELECT文
    sql = "select id,name,sex,section from employee"
    
    '既にシート「date」が存在する場合は削除
    For Each sheet In ThisWorkbook.Worksheets
        If sheet.Name = dataSheeName Then
            '確認メッセージを非表示
            Application.DisplayAlerts = False
            'シート削除
            Worksheets(dataSheeName).Delete
            '確認メッセージを表示
            Application.DisplayAlerts = True
        End If
    Next
    
    'シート「date」を新規作成
    Set dataSheet = Worksheets.Add(After:=Worksheets(Worksheets.Count))
    dataSheet.Name = dataSheeName
    
    '接続文字列の組み立て
    conStr = "ODBC;DRIVER=SQLite3 ODBC Driver;Database=" & dbName

    '「QueryTableオブジェクト(=クエリと接続)」を作成
    With dataSheet.QueryTables.Add(Connection:=conStr, _
                            Destination:=Range("B2"), _
                            sql:=sql)
        'SELECT文を実行
        .Refresh BackgroundQuery:=False
        '名前(後続で削除できるように名前を設定)
        .Name = "仮テーブル"
        '作成された「QueryTableオブジェクト(=クエリと接続)」を削除
        .Delete
    End With

    '上記で作成されてしまう名前定義(仮テーブル)を削除
    For Each n In ActiveWorkbook.Names
        If n.Name = dataSheeName & "!" & "仮テーブル" Then
            n.Delete '
        End If
    Next
    
End Sub

以下を設定します(14~18行目)。
※必要に応じて修正してください。

・SELECT文の結果を設定するシート名
・DB名(SQLiteのファイル名)
・SELECT文

既にシート「data」が存在する場合は削除します(21~30行目)。

「Worksheets.Add(After:=Worksheets(Worksheets.Count))」によって、シートの最後(一番右)にシート「data」を新規作成します(33、34行目)。

「QueryTables.Add」で「QueryTableオブジェクト(=クエリと接続)」を作成します(40~49行目)。
※データの取得/設定を実行した後に削除(Delete)します。

「Destination」に「Range(“B2”)」と指定しているため、
 ・読み込んだ内容はセル「B2」から設定
されます(41行目)。

PR

実行結果

SQLiteのデータを取得してシートへ設定できました。

実行結果
実行結果

列幅は自動で調整されます。

PR

参考①

シート上の表(一連のセル範囲)をテーブル化することで、
 ・スタイルの設定
 ・テーブル化した範囲の名前定義
ができます。

シート上の表(一連のセル範囲)をテーブル化
シート上の表(一連のセル範囲)をテーブル化


詳細は以下の記事をご確認ください。

PR

参考②

上記で使用した以下の詳細は、公式サイトをご確認ください。

●「QueryTables.Add」


●「QueryTableオブジェクト(=クエリと接続)」