【VBA】ADODBのSQLで重複削除が上手くいかなかったとき

ADODBを使って
エクセルデータをSQL操作する際
重複削除がうまくできなかったので
備忘録として残しておきます!

ADODBで失敗した重複削除のSQL文

コネクション条件

ThisWorkBookにコネクション。

マクロを回すとSheetに重複データが出て困る

と相談を受け、中身を見てみると
ADODBの
SELECT結果に重複データが混じっている
のが原因でした。

そこでSELECT文にデータを重複削除する
「DISTINCT」
を追記しようと考えました。

基本的なDISTINCT文

これで複数カラムで同じレコードは
重複削除されますね。

エラーが発生

基本的なDISTINCT文に沿って
SQLを書き直したのですが
何度やっても以下エラーが発生。。

エラー文
複数ステップのOLE DB操作でエラーが発生しました。

ADODBで成功した重複削除のSQL文

サブクエリでDISTINCT

簡単に書くとこんな感じです!

サブクエリ内でDISTINCTして
その結果をSELECTすると
うまく動作しました。

Microsoft Access SQL と ANSI SQL

SQLの規格について

ADODBのプロバイダで指定した
Accessデータベースエンジンは
Microsoft Access SQL

一般的にDBで扱っているSQLは
ANSI SQL

Microsoft Access SQLは
ANSI SQLをほぼ準拠しているけど
100%ではないらしい。

その中に
「 DISTINCT 集計関数の参照 」
は Microsoft Access SQL で
サポートされていません。
とあった!

けど…

SELECT COUNT( DISTINCT col1 )…
がサポートされてないと言ってるので

SELECT DISTINCT col1 …
これはうまく処理できるのでは?…

まだ自分が気づいていない事がありそう・・。
もう少し調べてみようと思います。

参照:Microsoft Access SQL と ANSI SQL の比較

困っている人がいれば
ひとつの参考として試してみてください。