Excel VBAでAccessのアクションクエリをフィルタ利用して実行し、セルにコピーする
前回は、Accessで複数パラメータ付きのアクションクエリをExcel VBAを利用して実行する方法を説明しました。
Excel VBAでAccessの複数パラメータ付きアクションクエリを実行し、セルにコピーする 前回は、Accessでパラメータ付きのアクションクエリをExcel VBAを利用して実行する方法を説明しました。 [sitecard s[…]
次はExcelのテーブルのデータをオートフィルタで処理する感じを、アクションクエリで処理します。
今回は、Accessのアクションクエリをレコードセットのフィルタを利用して、あたかもSQLを実行しているようにする方法です。パラメータを設定して実行するよりも、自由度があるため柔軟な設定ができます。
VBAを実行する前に、「Microsoft ActiveX Data Objects 6.1 Libraly」または「Microsoft ActiveX Data Objects 2.X Libraly」を参照設定します。
参照設定については、以下で説明しています。
事前バインディングと実行時バインディングの違い VBAのバインディングとは、外部のオブジェクトの機能をVBAで利用できるようにすることです。 バインディングは2通りの方法があり、実行時に利用できるようにする実行時バインディング(遅延[…]
ExcelのVBAで、Accessのアクションクエリをレコードセットのフィルタを利用して実行し、セルにコピーする基本的なコードは以下のような感じになります。
フィルタは、13行目でFilterを利用してSQLみたいな設定をしています。なお、Filterは1つまたは複数のANDまたはORで連結された文字列で構成します。
| 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 |     Dim cnn As ADODB.Connection     Dim rst As ADODB.Recordset     ' コネクションをセットし、Accessを開く     Set cnn = New ADODB.Connection     cnn.Provider = "Microsoft.Ace.OLEDB.12.0;"     cnn.Open ThisWorkbook.Path & "\ado4.accdb"     'レコードセットをセットする     Set rst = New ADODB.Recordset     'Accessのアクションクエリを開き、フィルタを利用して実行する     rst.Open "Q_data", cnn     rst.Filter = "市区町村名 Like '%札幌%' and 町域名 Like '%南%'"     If rst.EOF Then         MsgBox "データがありません。", vbInformation     Else         'レコードをA1セルへ貼り付ける         Range("A1").CopyFromRecordset rst     End If     ' 閉じる     rst.Close     cnn.Close     ' 解放する     Set rst = Nothing     Set cnn = Nothing | 
フィルタ処理をする場合は、Accessのアクションクエリの設定はなし
ExcelからADO(Microsoft ActiveX Data Objects)を利用してフィルタ実行する場合、Accessのクエリの抽出条件で設定するものはありません。
Filterの利用が容易なため、パラメータで実行よりもFilterで実行の方が良いかもしれません。