環境構築
必要なファイル
SQLite For Excel
https://github.com/govert/SQLiteForExcel/releases
sqlite3
https://www.sqlite.org/download.html
SQLite For ExcelのSQLiteForExcel_64.xlsm
sqlite3のsqlite3.dll
を使います。
SQLiteForExcel_64.xlsmの標準モジュールのSqlite3がライブラリーの本体です。
sqlite3のほうが、sqlite3(DB)の本体モジュールです
配置
x64\sqlite3.dll SQLiteForExcel_64.xlsm
こんな感じで配置します
修正
'修正前
Private Declare PtrSafe Function sqlite3_backup_init Lib "SQLite3" (ByVal hDbDest As LongPtr, ByVal zDestName As LongPtr, ByVal hDbSource As LongPtr, ByVal zSourceName As LongPtr) As Long
'修正後
Private Declare PtrSafe Function sqlite3_backup_init Lib "SQLite3" (ByVal hDbDest As LongPtr, ByVal zDestName As LongPtr, ByVal hDbSource As LongPtr, ByVal zSourceName As LongPtr) As LongPtr
SQLiteForExcel_64.xlsmの標準モジュールのSqlite3内の「sqlite3_backup_init」の部分の一部を修正します
戻り値の指定をLong => LongPtr に変更してください。
動作確認
Sqlite3Demo内の「Alltests()」を実行します。イミディエイトウィンドウで、実行結果を確認してください。
動作確認とともに、サンプルになっています。「Sqlite3Demo」をみれば使い方がわかるかと思います。
サンプルDBを作成する
DB Browser for SQLite
DB Browser for SQLite
https://forest.watch.impress.co.jp/library/software/sqldbbrowser/
Windows10上で、Sqlite3のDBを簡単に扱えるGUIソフトを導入します。インストールしてください。
サンプルのCSV
なんちゃって個人情報
http://kazina.com/dummy/
サンプルデータを作るのは面倒なので、上記サイトで自動生成します。CSVファイルを作成します。
サンプルDBの作成
DB Browser for SQLiteをつかって、作成したCSVファイルをインポートして、そこからサンプルDBを作成します。
DBをEXCELに読み込んでみる
サンプルDBができたので、読み込んでEXCELのセルに表示してみます。
サンプルソース
Public Sub Test_Select()
Dim InitReturn As Long
Dim RetVal As Long
Dim DBFile As String
Dim myDbHandle As LongPtr
Dim myStmtHandle As LongPtr
Dim i As Long
DBFile = ThisWorkbook.Path & "\sample.db3"
'---------------
'SQLite3 初期化処理
'---------------
InitReturn = SQLite3Initialize(ThisWorkbook.Path + "\x64")
If InitReturn <> SQLITE_INIT_OK Then
Debug.Print "Error Initializing SQLite. Error: " & Err.LastDllError
Exit Sub
End If
'---------------
'DB Open
'---------------
RetVal = SQLite3Open(DBFile, myDbHandle)
'---------------
'SELECT
'---------------
'SQL定義
RetVal = SQLite3PrepareV2(myDbHandle, "SELECT * FROM users", myStmtHandle)
'SQL実行
RetVal = SQLite3Step(myStmtHandle)
'ループして、レコードを読む
i = 1
Do While RetVal <> SQLITE_DONE
Cells(i, 1).Value = SQLite3ColumnText(myStmtHandle, 0)
Cells(i, 2).Value = SQLite3ColumnText(myStmtHandle, 1)
Cells(i, 3).Value = SQLite3ColumnText(myStmtHandle, 2)
Cells(i, 4).Value = SQLite3ColumnText(myStmtHandle, 3)
Cells(i, 5).Value = SQLite3ColumnText(myStmtHandle, 4)
Cells(i, 6).Value = SQLite3ColumnText(myStmtHandle, 5)
RetVal = SQLite3Step(myStmtHandle)
i = i + 1
Loop
'SQL終了処理
RetVal = SQLite3Finalize(myStmtHandle)
'---------------
'DB Close
'---------------
RetVal = SQLite3Close(myDbHandle)
Debug.Print "SQLite3Close returned " & RetVal
End Sub
エラー処理が甘めですが、こんな感じのコードを作りました。
DBFile = ThisWorkbook.Path & "\sample.db3"
DBファイルの指定はこの部分でしています。EXCELファイルの直下のsample.db3を読むようになります。
InitReturn = SQLite3Initialize(ThisWorkbook.Path + "\x64")
この辺でSQLite3の初期設定をしています。引数にsqlite3.dllの場所を指定しています
RetVal = SQLite3PrepareV2(myDbHandle, "SELECT * FROM users", myStmtHandle)
SQL文はこの辺りで指定してます
実行結果
こんな感じの実行結果になります。
コメントを残す