ADOを使ってExcelをテーブルとして読み込む方法について

今回のエントリーはExcelのシートに作成した表のデータをADOを使ってテーブルとして読み込む方法をアップしたいと思います。
関連するエントリー「Excelのシートを複数条件で検索するVBAサンプルコード(ADO)」も参考下さい。

今回のサンプルの表はかなりシンプルなものですが・・・。動作イメージは以下の通りです。
140129_2

ADOを使う為、まずはVBE(Visual Basic Editor)の参照設定でMicrosoft ActiveX Data Objects 2.X Libraryにチェックを入れましょう。
※参照設定の方法はこちらのページを参照

1.ボタンをクリックした際の読み込み用のコード

Private Sub cmdDisp_Click()
    Dim adoCON      As New ADODB.Connection
    Dim adoRS       As New ADODB.Recordset
    Dim strSQL      As String
    Dim odbdDB      As Variant

    'リストボックスをクリア
    lstName.Clear

    'データベースのパスを取得(ExcelブックをDBとする)
    odbdDB = ActiveWorkbook.Path & "\sample_140129.xlsm"
    
    'データベースに接続する
    Set adoCON = New ADODB.Connection

    With adoCON
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .Properties("Extended Properties") = "Excel 8.0"
        .Open odbdDB
    End With
    
    'カーソルをクライアント側に設定
    adoRS.CursorLocation = adUseClient
    
    'Sheet1をテーブルとしてSQLを設定
    strSQL = "SELECT * FROM [Sheet1$];"
    
    'レコードセットを開く
    adoRS.Open strSQL, adoCON, adOpenDynamic
    
    'テーブルを読み込む
    Do Until adoRS.EOF
        '検索対象の住所(A列)をリストボックスに追加
        lstName.AddItem adoRS.Fields(0).Value
        adoRS.MoveNext
    Loop
 
    'クローズ処理
    adoRS.Close
    Set adoRS = Nothing
    adoCON.Close
    Set adoCON = Nothing
End Sub

2.VBAコードの解説

ADOを使用してExcelに接続する

11~20行目でExcelのワークブックをデーターベースのテーブルとしてADOで接続しています。
具体的には11行目でデータベースとして利用するExcelのパスを設定し

'カレントディレクトリのデータベースパスを取得
odbdDB = ActiveWorkbook.Path & "\sample_140129.xlsm"

16~20行目でMicrosoft Jet OLE DB Provider (以下 “Jet プロバイダ”) を利用して接続します。

'データベースに接続する
Set adoCON = New ADODB.Connection

With adoCON
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .Properties("Extended Properties") = "Excel 8.0"
    .Open odbdDB
End With

Excelの表をテーブルとして開きます

次にテーブルを開く処理について説明します。
Excleのシート(シート名はSheet1)に作成した表をテーブルと見なしてSQLを作成し(26行目)レコードセットを開きます(29行目)。

'SQLを設定
strSQL = "SELECT * FROM [Sheet1$];"

'レコードセットを開く
adoRS.Open strSQL, adoCON, adOpenDynamic

Excelの表を繰り返し読み込んでフォームのリストボックスに表示

リストボックスにテーブルの値を繰り返し読み込みます(32~36行)
テーブルの値はFieldsコレクションを利用して最初のフィールド Fields(0) を参照しています。

'テーブルを読み込む
Do Until adoRS.EOF
    '検索対象の住所(A列)をリストボックス(lstName)に追加
    lstName.AddItem adoRS.Fields(0).Value
    adoRS.MoveNext
Loop

以上、今回はExcelをテーブルとしてADOを使って利用する為のVBAコードでした。

今回のサンプルファイルは以下のリンクからダウンロード可能です。