■ 最新の投稿

Excel ブックに対して IIf をネスト利用した SQL 文を実行する

Excel のワークシートのデータを SELECT 文で取得する際に、検索結果を IIf 関数をネストした複雑なSQLの実行が可能です。

そのためには DAO(※Data Access Object の略)を利用します。ここで紹介す
る方法を実現するには、「Microsoft Office 14.0 Access database engine Object Library」が参照設定されていることが前提になります。


そのためには DAO(※Data Access Object の略)を利用します。ここでは、DAO を使ったデータベース検索方法を紹介します。

① 「Microsoft Office 16.0 Access database engine Object Library」を参照設定します。

② 参照設定したことで、DAOを利用できます。Excel ブックを用意して、標準モジュールに DAO を利用した次のコードを記載します。

Option Explicit

Public Sub Sample_IIFs_DAO_01()

    ' DAO データベース設定用変数
    Dim db As DAO.Database

    ' DAO レコードセット設定用変数
    Dim rs As DAO.Recordset

    ' 単純なループカウンタ
    Dim lp As Long

    ' 検索結果表示用文字列
    Dim str As String

    ' "C:\Temp\仲間.xlsx"をデータベースとして開く。
    Set db = DBEngine.Workspaces(0).OpenDatabase( _
    "C:\Temp\仲間.xlsx" _
    , False _
    , False _
    , "Excel 12.0;HDR=YES" _
    )

    ' レコードセットを取得する。
    Set rs = db.OpenRecordset( _
    Name:=" SELECT 名前,  IIf(等級=1, '部長', IIf(等級=2, '課長', '一般')) FROM [Sheet1$] " _
    , Type:=dbOpenDynaset _
    )

    ' 対象レコードが1件以上存在するか調べる。
    If rs.EOF Then

    str = "(検索結果:0件)"

    Else

    ' 検索できる全てのレコードを参照する。
    Do Until (rs.EOF)

    ' 全ての検索結果をカンマ区切りで連結する。
    str = str & rs.Fields(0)

    For lp = 2 To rs.Fields.Count
    str = str & "," & rs.Fields(lp - 1)
    Next lp

    str = str & vbLf

    ' 次のレコードに移る。
    rs.MoveNext

    Loop

    End If

    ' カーソルを閉じる。
    rs.Close
    Set rs = Nothing

    ' データベースを閉じる。
    db.Close
    Set db = Nothing

    ' 検索結果を表示する。
    MsgBox str, vbOKOnly

End Sub

③ Sample_Between_DAO_01を実行します。Excel ワークシートをデータベースと見なして検索処理が実行されます。


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です