Drald C. Gause, Gerald M. Weinberg 変化のために自分を責めてみよう、たとえほんの一瞬でも

blog image
ExcelシートにSQLでアクセスする方法

ExcelシートにSQLでアクセスする方法は、データの管理や処理に新たな可能性を開く手段です。

Excelは多くの人にとって馴染み深く、データの整理や計算に役立つツールですが、特に大量のデータを効果的に操作する場合、SQL(Structured Query Language)を使用することで高度なデータベースのような操作が可能になります。

ExcelシートにSQLでアクセスすると、以下のようなメリットがあります。

  1. ExcelシートをDBのテーブルのように扱える
    ExcelシートをSQLデータベースのテーブルのように扱うことで、データを効率的に組織化し、関連データを連携させることができます。これにより、情報をより簡単に検索、フィルタリング、集計できます。

  2. FindなどExcel関数ではなく、SQLでシート状のデータをレコードに見立てて、条件を指定し行単位で取得できる
    Excel関数は便利ですが、SQLを使用することで、より高度な条件を指定してデータを抽出できます。データを「レコード」として扱い、SQLクエリを使ってデータの抽出、更新、削除、結合などの操作が行えます。

  3. Excelファイル単体で手軽にデータの管理できる
    通常のデータベース管理システムの導入が必要なく、Excelファイル自体がデータベースの役割を果たします。これにより、データの管理が簡単で、Excelの既存の機能との統合が可能です。

これらのニーズを満たすために、ADODB(ActiveX Data Objects Database)を使用した接続コードを用意することで、ExcelファイルをSQLデータベースのように操作する準備が整います。

ADODBを使用することで、ExcelシートにSQLクエリを送信し、データを効率的に操作できます。以下にその実装手順とコードのサンプルをご紹介します。

用意するもの

Excelファイルのみです。シートをテーブル代わりにします。

実装手順

  1. シートにデータを書く(A1:D4)
  1. 「Microsoft ActiveX Data Object 6.1 Library」を参照設定する
  2. ExcelVBAのエディタを開き、標準モジュール(mdlCommon)を作成する
  3. 下記サンプルコードを貼り付ける
  4. showStaffInformation 関数内にカーソルを置いて実行する
  5. イミディエイトウィンドウに営業部のレコードが表示されます

サンプルコード

Option Explicit

Public Sub showStaffInformation()

  ' 営業部のスタッフを取得
  Call getListByBranch("営業")
  
End Sub


Private Sub getListByBranch(branch As String)

    Dim strSQL  As String, conStr As String
    Dim cnn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    
    ' シートに接続
    conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & ActiveWorkbook.FullName & "';" & _
                 "Extended Properties=""Excel 12.0;HDR=YES;IMEX=1;"";"
    
    strSQL = "SELECT [id], [名前], [部門], [内線] FROM [Sheet1$A1:D] WHERE [branch] = '" & branch & "';"
         

    cnn.Open conStr
    rs.Open strSQL, cnn, adOpenStatic, adLockOptimistic, adCmdText
    
    ' Recordset の処理
    If Not rs.EOF Then
        Do While Not rs.EOF
            Debug.Print rs.Fields("id").Value & "," & rs.Fields("名前").Value & "," & rs.Fields("部門").Value & "," & rs.Fields("内線").Value
            rs.MoveNext
        Loop
    End If

End Sub

以上、ExcelシートにSQLでアクセスする方法についてご紹介しました。Excelシートをデータとして、SQLで操作する。。これは手軽さにおいて最強かもしれませんね!


更新日:2023-09-06