Excel VBA | キャッシュをSQLiteやAccessに保存してSQL検索する応用例

Excel VBA VBA
スポンサーリンク

CSVを毎回読み込むのではなく、一度キャッシュをデータベース(SQLiteやAccess)に保存しておけば、次回以降はSQL検索で高速に住所を取得できます。これにより、大量の郵便番号検索でも効率的に処理できます。


VBAコード例(Access利用)

Sub ImportPostalCSVToAccess()
    Dim conn As Object
    Dim filePath As String
    
    ' Accessデータベースファイル(事前に作成しておく)
    filePath = "C:\data\PostalCache.accdb"
    
    ' ADO接続
    Set conn = CreateObject("ADODB.Connection")
    conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & filePath & ";"
    
    ' 郵便番号検索例(市区町村まで取得)
    Dim rs As Object
    Set rs = conn.Execute("SELECT 都道府県, 市区町村, 町域 FROM PostalTable WHERE 郵便番号='1000001'")
    
    If Not rs.EOF Then
        Debug.Print rs.Fields(0).Value & rs.Fields(1).Value & rs.Fields(2).Value
    End If
    
    rs.Close
    conn.Close
End Sub
VB

VBAコード例(SQLite利用)

SQLiteは軽量で高速なデータベースです。Windows環境では System.Data.SQLite や ODBCドライバを利用できます。

Sub QueryPostalSQLite()
    Dim conn As Object, rs As Object
    Dim dbPath As String
    
    dbPath = "C:\data\PostalCache.sqlite"
    
    ' SQLite接続(ODBCドライバ利用)
    Set conn = CreateObject("ADODB.Connection")
    conn.Open "Driver=SQLite3 ODBC Driver;Database=" & dbPath & ";"
    
    ' 郵便番号検索
    Set rs = conn.Execute("SELECT Prefecture, City, Town FROM PostalTable WHERE PostalCode='1500002'")
    
    If Not rs.EOF Then
        Debug.Print rs.Fields(0).Value & rs.Fields(1).Value & rs.Fields(2).Value
    End If
    
    rs.Close
    conn.Close
End Sub
VB

実行イメージ

郵便番号都道府県市区町村町域
1000001東京都千代田区千代田
1500002東京都渋谷区渋谷
2200012神奈川県横浜市西区みなとみらい

実務での応用

  • 初回のみCSVをインポート → 以降はSQL検索で高速処理
  • インデックス作成 → 郵便番号列にインデックスを付けることで検索速度を最適化
  • キャッシュ更新 → 日本郵便の最新CSVを定期的に反映
  • Access/SQLiteを共有 → チーム全員で同じ住所辞書を利用可能

💡 この方法を使えば「郵便番号から住所をSQL検索で即座に取得」でき、数万件の顧客リストでも高速に処理できます。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました