こんにちはJitanTechです。
みなさんはExcelをデータベースとみなして、結果を取得したいとおもったことはありませんか。
今回はそのような方のために、Excelに対してSQL文を実行する方法をご紹介します。
ExcelにSQL文を実行する方法。
ではいってみましょう。
サンプルプログラム
次のサンプルではExcelシートにSELECT文を流して結果を取得します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
Sub Sample() ' コネクション、レコードセット変数 Dim cn As Object Dim rs As Object ' コネクション、レコードセットを生成 Set cn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") ' コネクション接続文字列 cn.Provider = "Microsoft.ACE.OLEDB.12.0" cn.Properties("Extended Properties") = "Excel 12.0;HDR=YES" ' コネクションオープン cn.Open ThisWorkbook.FullName ' SQL文 ここでシート名を指定する[Excelシート名$]の形式です。 Dim strSQL As String strSQL = "" strSQL = strSQL & " SELECT *" strSQL = strSQL & " FROM [Excelシート名$]" strSQL = strSQL & " ORDER BY 商品コード " ' レコードセットにSQLの結果を入れる rs.Open strSQL, cn ' 結果出力 Cells(1, 1).CopyFromRecordset rs ' 変数の開放 rs.Close Set rs = Nothing cn.Close Set cn = Nothing End Sub |
解説
接続オブジェクト
ExcelにSQL文を投げるためには接続オブジェクトを生成する必要があります。
Set cn = CreateObject(“ADODB.Connection”)
このオブジェクトを通してExcelブックにアクセスします。
※ADO(ActiveX Data Objects)とは ADOとは、Microsoftが提唱しているデータアクセス技術のことです。
Recordset オブジェクト (ADO)
レコードセットのOPENメソッドにSQL文を渡すため、レコードセットを生成します。
Set rs = CreateObject(“ADODB.Recordset”)
このレコードセットオブジェクトのOPENメソッドにSQL文を渡すことでクエリが実行できます。
コネクションのプロバイダ
コネクションのプロバイダはExcelブックとADOをつなぐ役割をもちます。
cn.Provider = “Microsoft.ACE.OLEDB.12.0”
プロバイダープロパティにプロバイダーを文字列で指定します。以下のように使い分けできます。
指定文字列 | 内容 |
---|---|
Microsoft.Jet.OLEDB.4.0 | Office2003以前の場合 |
Microsoft.ACE.OLEDB.12.0 | Office2007以降の場合 |
コネクションのプロパティ
ExcelのシートやCSVをデータベースにする際に指定します。
cn.Properties(“Extended Properties”) = “Excel 12.0;HDR=YES”
以下のように使い分けできます。
指定文字列 | 内容 |
---|---|
Excel 8.0 | Office2003以前の場合 |
Excel 12.0 | Office2007以降の場合 |
Text | csvファイルの場合 |
指定文字列 | 内容 |
---|---|
HDR=YES | 1行目をヘッダーとみなす場合 |
HDR=NO | 1行目をヘッダーとみなさない場合 |
コネクションを開く
データベースとして開くファイルを指定します。
cn.Open ThisWorkbook.FullName
ここではThisWorkbook.FullNameとすることで、自身のExcelブックを指定しています。
SQL文でExcelシートを指定
Excelシートをデータベースのテーブルとして指定するには以下のようにします。
strSQL = strSQL & ” SELECT *”
strSQL = strSQL & ” FROM [Excelシート名$]“
strSQL = strSQL & ” ORDER BY 商品コード “
[Excelシート名$]というように、Excelシート名の後ろに $ をつけることがポイントです。そして[]で囲むことも必要です。
SQL文の実行
レコードセットオブジェクトのOPENメソッドでSQL文を実行します。
rs.Open strSQL, cn
第一引数にSQL文、第二引数にコネクションオブジェクトを渡して実行します。
実行結果
以下のようなExcelシートに対してSELECT文を発行します。

以下のような結果を得ることができました。

SELECT文で結果が取得されました。
まとめ
この記事ではExcelシートをデータベースのテーブルのように扱い、SQL文を発行する方法をご紹介しました。
・ADO(ActiveX Data Objects)を使用する。
・Excelシート名の後ろに$をつけて[]で囲む。
以下は参考にした記事です。

ではまた。
コメント