VBA:ExcelからAccessのアクションクエリを実行し、セルにコピーする

VBA

Excel VBAでAccessのアクションクエリを実行し、セルにコピーする

自動化を行うにあたり、AccessのアクションクエリをExcel VBAを利用して実行する機会があったので調査しました。

VBAを実行する前に、「Microsoft ActiveX Data Objects 6.1 Libraly」または「Microsoft ActiveX Data Objects 2.X Libraly」を参照設定します。

参照設定については、以下で説明しています。

関連記事

事前バインディングと実行時バインディングの違い VBAのバインディングとは、外部のオブジェクトの機能をVBAで利用できるようにすることです。 バインディングは2通りの方法があり、実行時に利用できるようにする実行時バインディング(遅延[…]

ExcelのVBAを利用して、Accessのアクションクエリを実行し、セルにコピーする基本的なコードは以下の通りです。

ここで大きな落とし穴があります。

Accessのアクションクエリ実行は、アスタリスク(*)のワイルドカード文字を使う

Accessでアクションクエリを実行する場合、LIKEのワイルドカードはアスタリスク(*)です。ここは、抽出条件で「LIKE “*札幌*”」と設定します。

Accessでアクションクエリを実行する場合LIKEはアスタリスクで設定する

しかし、アスタリスクのままVBAからアクションクエリを実行すると0件になってしまいます。

データが0件

ExcelからADO利用してアクションクエリ実行は、パーセント(%)のワイルドカード文字を使う

ExcelからADO(Microsoft ActiveX Data Objects)を利用してVBAを実行する場合、Likeのワイルドカードはパーセント(%)です。SQLと同じですね。

ここはで、「LIKE “%札幌%”」と設定します。

VBAでアクションクエリを実行する場合LIKEはパーセントを設定する

ワイルドカード文字のまとめ

まとめると、Accessのアクションクエリの抽出条件で札幌という文字を抽出する場合、以下のように設定します。

用途 Accessでアクションクエリ実行 VBAでADOを利用してアクションクエリ実行
説明 ワイルドカードはアスタリスク(*) ワイルドカードはパーセント(%)
利用例 LIKE “*札幌*” LIKE “%札幌%”

VBAでADOを利用してデータを抽出する際、エラーが起きていないが、データが0件になっていたら、ワイルドカードも疑ったほうが良いかもしれません。

VBAでSQLを扱うときは、気をつけましょう。