Excel VBA 逆引き集 | SQLログ

Excel VBA
スポンサーリンク

外部連携 × SQLログの記録

外部データベースと連携する際に「どんなSQLを実行したか」「いつ実行したか」を ログとして残す 仕組みを作っておくと、トラブルシューティングや監査に役立ちます。
初心者向けに、コード例やテンプレートをかみ砕いて説明します。


基本の考え方

  • SQLログとは?
    実行したSQL文や結果をファイルやシートに記録する仕組み。
  • 用途:
    • どんなSQLを実行したかを後から確認できる
    • エラー発生時の原因調査に役立つ
    • 実務で「監査証跡」として利用可能

テンプレ1:SQL文をログファイルに書き出す

Sub SQL_Log_ToFile()
    Dim conn As Object
    Dim sql As String
    Dim fso As Object, ts As Object
    Dim logPath As String
    
    ' ログファイルのパス
    logPath = Environ("USERPROFILE") & "\Desktop\sql_log.txt"
    
    ' 実行するSQL
    sql = "UPDATE Customers SET Age = 31 WHERE Name = '山田太郎'"
    
    ' DB接続(例:Access)
    Set conn = CreateObject("ADODB.Connection")
    conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                            "Data Source=C:\temp\sample.accdb;"
    conn.Open
    
    ' SQL実行
    conn.Execute sql
    
    ' ログ書き込み
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.OpenTextFile(logPath, 8, True) ' 8=追記モード
    ts.WriteLine Now & " 実行SQL: " & sql
    ts.Close
    
    conn.Close
    MsgBox "SQLを実行し、ログに記録しました!"
End Sub
VB
  • ポイント:
    • OpenTextFile(..., 8, True) で追記モード。
    • Now で日時を記録。

テンプレ2:SQLログをシートに記録する

Sub SQL_Log_ToSheet()
    Dim conn As Object
    Dim sql As String
    Dim ws As Worksheet: Set ws = Worksheets("SQL_Log")
    Dim lastRow As Long
    
    sql = "INSERT INTO Customers (Name, Age) VALUES ('鈴木花子', 25)"
    
    Set conn = CreateObject("ADODB.Connection")
    conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                            "Data Source=C:\temp\sample.accdb;"
    conn.Open
    
    conn.Execute sql
    
    ' ログをシートに記録
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
    ws.Cells(lastRow, 1).Value = Now
    ws.Cells(lastRow, 2).Value = sql
    ws.Cells(lastRow, 3).Value = "成功"
    
    conn.Close
    MsgBox "SQLを実行し、シートにログを記録しました!"
End Sub
VB
  • ポイント:
    • ログ専用シートを作って記録。
    • 実行日時・SQL文・結果を残す。

テンプレ3:エラー時もログに残す(Try-Catch的処理)

Sub SQL_Log_WithError()
    Dim conn As Object
    Dim sql As String
    Dim ws As Worksheet: Set ws = Worksheets("SQL_Log")
    Dim lastRow As Long
    
    sql = "DELETE FROM Customers WHERE Name = '佐藤'"
    
    On Error GoTo ErrHandler
    
    Set conn = CreateObject("ADODB.Connection")
    conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                            "Data Source=C:\temp\sample.accdb;"
    conn.Open
    
    conn.Execute sql
    
    ' 成功ログ
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
    ws.Cells(lastRow, 1).Value = Now
    ws.Cells(lastRow, 2).Value = sql
    ws.Cells(lastRow, 3).Value = "成功"
    
    conn.Close
    Exit Sub
    
ErrHandler:
    ' エラーログ
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
    ws.Cells(lastRow, 1).Value = Now
    ws.Cells(lastRow, 2).Value = sql
    ws.Cells(lastRow, 3).Value = "エラー: " & Err.Description
    If Not conn Is Nothing Then conn.Close
    MsgBox "SQL実行中にエラーが発生しました。ログに記録しました。"
End Sub
VB
  • ポイント:
    • On Error GoTo ErrHandler でエラー処理。
    • 成功・失敗どちらもログに残す。

例題で練習

'例1:UPDATE文を実行してログファイルに記録
'例2:INSERT文を実行してログシートに記録
'例3:DELETE文を実行して成功/失敗をログに残す
VB

初心者向けポイント

  • SQLログは「いつ・何を実行したか」を残す仕組み
  • ファイルに書き出す方法とシートに記録する方法がある
  • エラー処理を組み込むと安心
  • 実務では「監査証跡」として必須
  • Excelを「SQL実行履歴ビューア」として使える

👉 この「外部連携 × SQLログテンプレ」を覚えておけば、Excel VBAで 外部DBと連携したSQL実行の履歴を残し、監査やトラブル対応に活用する処理 を簡単に作成できます。

タイトルとURLをコピーしました