Excel VBAでAccessのアクションクエリをSQLで実行し、セルにコピーする
前回は、AccessでアクションクエリにFilterを利用してExcel VBA実行する方法を説明しました。
Excel VBAでAccessのアクションクエリをフィルタ利用して実行し、セルにコピーする 前回は、Accessで複数パラメータ付きのアクションクエリをExcel VBAを利用して実行する方法を説明しました。 [sitecard […]
今回は、AccessのアクションクエリをオードソックスなSQLを利用します。SQLは自由度が高く、極めて柔軟に設定ができるため、今までパラメータやフィルタなどを利用してデータを取得した中では、一番使いやすい方法です。
複雑なデータを抽出するためにはSQLを理解する必要がありますが、SQLは、SELECT(選択),INSERT(追加),UPDATE(更新),DELETE(削除)の4つの命令を理解すれば大丈夫です。
VBAを実行する前に、「Microsoft ActiveX Data Objects 6.1 Libraly」または「Microsoft ActiveX Data Objects 2.X Libraly」を参照設定します。
参照設定については、以下で説明しています。
事前バインディングと実行時バインディングの違い VBAのバインディングとは、外部のオブジェクトの機能をVBAで利用できるようにすることです。 バインディングは2通りの方法があり、実行時に利用できるようにする実行時バインディング(遅延[…]
ExcelのVBAで、AccessのアクションクエリをSQLで実行し、セルにコピーする基本的なコードは以下のような感じになります。
13行目でSELECTという命令のSQL文を作成し、15行目でSQLを実行してデータを取得しています。
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 |
Dim cnn As ADODB.Connection Dim rst As ADODB.Recordset Dim strSQL As String ' コネクションをセットし、Accessを開く Set cnn = New ADODB.Connection cnn.Provider = "Microsoft.Ace.OLEDB.12.0;" cnn.Open ThisWorkbook.Path & "\ado5.accdb" 'レコードセットをセット Set rst = New ADODB.Recordset ' アクションクエリのSQL文を作成する strSQL = "select * from Q_data where 市区町村名 Like '%札幌%' and 町域名 Like '%南%'" ' AccessのアクションクエリをSQLで利用して開く rst.Open strSQL, cnn If rst.EOF Then MsgBox "データがありません。", vbInformation Else 'レコードをA1セルへ貼り付ける Range("A1").CopyFromRecordset rst End If ' 閉じる rst.Close cnn.Close |
SQLでデータを取得をする場合は、Accessのアクションクエリの設定はなし
ExcelからADO(Microsoft ActiveX Data Objects)を利用してSQLを実行する場合、Accessのクエリの抽出条件で設定するものはありません。
SQLに慣れていれば、SQLの4つの命令をフルに活用してバリバリと実行することをおすすめします。これからSQLを始める方も、SQLに慣れればSQLの良さが理解でき、SQL以外は使わなくなると思います。