【Excel VBA】ExcelシートをデータベースとみなしてSELECT文を実行する方法

この記事を読むことで以下の方法がわかります。

この記事で学べること

Excelシートに対してSELECT文を発行し、結果を得る方法。

サンプルプログラム

解説

接続オブジェクトの生成

Excelシートに対してSQL文を発行するには、接続オブジェクトを生成する必要があります。

接続オブジェクト(ADO)の生成

Set cn = CreateObject(“ADODB.Connection”)

このオブジェクトを通してExcelブックにアクセスします。

※ADO(ActiveX Data Objects)とは ADOとは、Microsoftが提唱しているデータアクセス技術のことです。

Recordset オブジェクト (ADO)の生成

レコードセットのOPENメソッドにSQL文を渡すため、レコードセットを生成します。

Recordset オブジェクト (ADO)の生成

Set rs = CreateObject(“ADODB.Recordset”)

このレコードセットオブジェクトのOPENメソッドにSQL文を渡すことでクエリが実行できます。

コネクションのプロバイダを指定

コネクションのプロバイダはExcelブックとADOをつな役割をもちます。

Provider プロパティ (ADO)

cn.Provider = “Microsoft.ACE.OLEDB.12.0”

プロバイダープロパティにプロバイダーを文字列で指定します。以下のように使い分けできます。

指定文字列内容
Microsoft.Jet.OLEDB.4.0Office2003以前の場合
Microsoft.ACE.OLEDB.12.0Office2007以降の場合
コネクションのプロパティを指定

ExcelのシートやCSVをデータベースにする際に指定します。

拡張プロパティの指定

cn.Properties(“Extended Properties”) = “Excel 12.0;HDR=YES”

以下のように使い分けできます。

指定文字列内容
Excel 8.0Office2003以前の場合
Excel 12.0Office2007以降の場合
Textcsvファイルの場合
指定文字列内容
HDR=YES1行目をヘッダーとみなす場合
HDR=NO1行目をヘッダーとみなさない場合
コネクションを開く

データベースとして開くファイルを指定します。

拡張プロパティの指定

cn.Open ThisWorkbook.FullName

ここではThisWorkbook.FullNameとすることで、自身のExcelブックを指定しています。

SQL文でExcelシートを指定

Excelシートをデータベースのテーブルとして指定するには以下のようにします。

Excelシートの指定

strSQL = strSQL & ” SELECT *”
strSQL = strSQL & ” FROM [Excelシート名$]
strSQL = strSQL & ” ORDER BY 商品コード “

[Excelシート名$]というように、Excelシート名の後ろに $ をつけることがポイントです。そして[]で囲むことも必要です。

SQL文の実行

レコードセットオブジェクトのOPENメソッドでSQL文を実行します。

Excelシートの指定

rs.Open strSQL, cn

第一引数にSQL文、第二引数にコネクションオブジェクトを渡して実行します。

実行結果

以下のようなExcelシートに対してSELECT文を発行します。

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

SELECT文で結果が取得されました。

まとめ

この記事ではExcelシートをデータベースのテーブルのように扱い、SQL文を発行する方法をご紹介しました。

この記事で学んだこと

・ExcelシートをDBとして扱うには、ADO(ActiveX Data Objects)を使用する。

・コネクションオブジェクトとレコードセットオブジェクトの生成方法。

・SQL文の中でExcelシート名の後ろに$をつけて[]で囲む必要がある。

・レコードセットのOPENメソッドにSQL文とコネクションを渡して実行する方法。

以下は参考にした記事です。

【VBA】ADOを使用してExcel表をDB操作する方法のまとめ(範囲指定、書き込みなど) - Qiita
はじめにこの記事は、ADO(ActiveX Data Objects)を使用して、ExcelファイルをSQL文で操作する方法のまとめです。大半はよくある内容ですが、ワークシートの読み込みから、D…
【Excel】ADOでAccess・Excel・CSVへ接続・操作_JET・ACEプロバイダ編
ADOでプロバイダとしてACE・Jetを使ったExcelからAccess・Excel・CSVへのデータベース接続とSQL操作を説明。接続時のパラメータでデータ操作可否が変わる為、発生するプロパティ値を示して詳細説明。

ではまた。

コメント