TOP

Excel VBA の SQL クエリ

外部ソースからデータを _t​​blExcel シートに取得するには、さまざまな方法があります。この記事では、VBA で SQL を使用して、MS Access データベース ファイルと Excel ファイルのデータをクエリする方法を説明します。はい、SQL と VBA を混ぜてみましょう!そしてそれはあなたが思っているよりも良いです!

SQL は Structured Query Language の略で、データベース (MS Access、MS SQL Server、Oracle、Sybase、SAP、MySQL など) から情報を取得するために使用される言語です。

インターネット、テキスト ファイル、または他の Excel または CSV ファイルからデータを取得することもできます。


1. Excel VBA からファイル MS Access への SQL クエリ

したがって、レポート用のデータベースからのデータの取得を自動化するには、データベース接続 (以下のマクロの変数 varConn) と SQL クエリ (変数 varSQL) が必要です。以下の例は、MS Access の小規模データベースからデータを取得する SQL クエリです。

[MS Access データベースをダウンロード] をクリックします。 MS Access ファイルは次のようになります。

SQL クエリを実行するマクロを作成しましょう。

メニュー「サービス - マクロ - エディター」Visual Basic, insert 新しいモジュール (「挿入 - モジュール」メニュー) を開き、そこにマクロ テキストをコピーします。

Sub SQLQuery_1()
Dim varConn As String
Dim varSQL  As String

    Range("A1").CurrentRegion.ClearContents

    varConn = "ODBC;Driver={Microsoft Access Driver (*.mdb, *.accdb)}"

    varSQL = "SELECT Month, Product, City FROM Sumproduct"

         With ActiveSheet.QueryTables.Add(Connection:=varConn, Destination:=Range("A1"))
             .CommandText = varSQL
             .Refresh BackgroundQuery:=False
         End With
End Sub 

[保存] をクリックして、Excel に戻ります。 [表示] - [マクロ] (Alt+F8) メニューでマクロの名前「SQLQuery_1」を選択します。ダイアログ ボックスが表示されるので、[データベース...] をクリックし、Access ファイルを探して、[OK] をクリックします。

これで、マクロ クエリが、test.mdb データベースの Sumproduct テーブルから Month、Product、および City 列を Excel ファイルに抽出したことがわかります。

2. VBA から閉じられたファイル Excel への SQL クエリ

同様に、データベースからのように通常の Excel ファイルからデータを取得できます。このためには、マクロ コードを少し書き直し、接続ドライバーを Access から Excel に変更する必要があります。

Sumproduct テーブルを Access から Excel にエクスポートし、ファイルを保存します。次に、変更したコードを新しいモジュールに挿入し、マクロを実行します。

Sub SQLQuery_2()
Dim varConn As String
Dim varSQL  As String

    Range("A1").CurrentRegion.ClearContents

    varConn = "ODBC;Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}"

    varSQL = "SELECT Month, Product, City FROM Sumproduct"

         With ActiveSheet.QueryTables.Add(Connection:=varConn, Destination:=Range("A1"))
             .CommandText = varSQL
             .Refresh BackgroundQuery:=False
         End With
End Sub 

ウィンドウが表示され、Excel ファイル (Sumproduct.xlsx または別の拡張子を持つ名前にする必要があります) を選択できます。私たちはそれを見つけて選択します。 [OK] をクリックすると、Access ファイルからと同じデータが取得されます。

トピックに関する記事:

  • Access から Excel にデータをインポート