ADOを使ってExcelをテーブルとして読み込む方法について
今回のエントリーはExcelのシートに作成した表のデータをADOを使ってテーブルとして読み込む方法をアップしたいと思います。
関連するエントリー「Excelのシートを複数条件で検索するVBAサンプルコード(ADO)」も参考下さい。
今回のサンプルの表はかなりシンプルなものですが・・・。動作イメージは以下の通りです。
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コードでした。
今回のサンプルファイルは以下のリンクからダウンロード可能です。