目次
ACCESSでサブクエリをVBAで実行することを考える
こんにちは。伊川(@naonaoke)です。
今回は、サブクエリをVBAで実行しようかと考えました。
もちろん、競馬のためです。
サブクエリは、通常は、ACCESSの基本書には記載がありません。
それは、難しいからです。
サブクエリは、別名で、副問合わせといわれます。
同じような記事を一度書いていますので、その記事を参照してから読んでいただくと理解が深まります。
クエリの中に、クエリを作成するのが、サブクエリです。
このブログはこんな人にお勧め
- サブクエリを勉強したい人
- サブクエリを知らない人
- サブクエリをVBAで実行したいと思っている人
このブログを、読み終わるころには・・・・
サブクエリを作成できるようになっています。しかし、VBAで、サブクエリを実行しようとは思わないと思います。
なぜならば、それほど、意味が無いからです。
サブクエリ
先ほど、私は、サブクエリとは、クエリの中にクエリを作成すると言いました。
今回は競馬ネタなのですが、それとは別に考えてみます。
例えば、1年1組の中で、苗字が山田であることを条件にデータを抽出したいと思います。
これは、1年1組で、一回抽出後、さらに、山田で抽出します。
抽出という行為が、2回あります。
これが、サブクエリです。
サブクエリ VBAで実行する意味がないとなぜ考えたのか?
それは、抽出したデータに色を塗りたいからです。
抽出したデータをACCESSのままで利用するなら、問題ありません。
ACCESSも、色を付けたり、字を太くしたりと言うことはもちろんできます。
しかし、それは、ACCESSよりも、Excelの方が、直感的に操作できるので、Excelに軍配が上がります。
そうすると、何も、VBAで実行しなくても、抽出したいデータの分だけクエリを作成して、Excelへ転送すればいいのではないか?
そうなると、VBAは私にとっては無意味となりました。
言い訳ではないですが、サブクエリを記載するのは、結構難しいものでした。
書きなれていないだけなのですが、今回は止めました。
サブクエリ 作業手順 その2 サブクエリを7つ作成する
この書籍に記載のある、内容を、サブクエリにします。
この書籍は、日刊スポーツが、毎週発表するコンピ指数というものがあります。
単純に言いますと、1番すごい馬には、90点という数値が振られます。最高点が90点です。
すごい馬順に、90,89,88,87,86・・・・・・・・と、競走馬の能力順に数値が振られます。
このコンピ指数を使って、条件の満たすレースを抽出したいのです。
同一レース⇒1年1組
条件を満たす数字の競走馬⇒苗字が山田
先ほどと同じサブクエリです。
サブクエリ 作業手順 その2 抽出条件を決める
条件その1 1位の馬が1枠 かつ1位の馬の数値が78以下
上記の条件で抽出します。
このようなSQL文を記載します。
※動画の中では、サブクエリを3つ紹介しましたが、ブログでは、上記の図だけにします。
サブクエリ 作業手順 その4 音読してみる
In (SELECT レースID FROM Q_コンピ追加
WHERE ( 改コンピ能力 = 1 And 改コンピ <= 78 And 枠= 1)
GROUP BY レースID
HAVING Count(1) = 1
)
Q_コンピ追加というクエリの、レースIDの中から、
改コンピ能力が1 改コンピ <= 78 枠= 1を条件に、
レースIDをグループとして、そのレコード数をカウントして、集約して抽出する。
こんな感じでしょうか?
ちなみに、ご視聴者様から質問も来たので、その質問も合わせて、下記に記載します。
サブクエリ 作業手順 その5 クエリごと、Excelへ転送する
ACCESSから、Excelへ転送する一番カンタンなコードです。
Microsoft ActiveXData Objects 6.1 Libraryにチェックを入れます。
これが、ACCESSから、Excelへ転送するための、おまじないです。
上記が、ACCESSから、Excelへ転送するためのコードです。
基本、飯田式_2を変更することで、コピペで再利用可能です。
データ転送完了です。
ここがポイント
今回は、サブクエリをExcelに転送する内容でした。ACCESSSのフォームでVBAを実行するより、Excelに転送した方が、はるかに汎用性があります。転送することは、難しいようですが、コピペで対応できます。
しかし、なんでもかんでも、転送すれば良いというものではありません。
TPOを考えてコードを記載しましょう。
まとめ
同一グループ内というのは、みなさんの会社では、各部署ごとの数字という事になります。
Excelで思いつくのは、連想配列ですが、連想配列は、決してカンタンではありません。
むしろ難しいと思います。
しかし、ExcelとACCESSが連携すれば、連想配列など、知らなくてもできます。
ぜひ、ExcelとACCESSの連携を覚えて、業務を楽にしてください。
今回のサンプルファイルは、ありません。
わからない事を延々と考えるのは、無駄です。
- なんで作動かないの?
- もうやだ!VBAなんか嫌い!
- ネットで調べても情報がない!
必ず作動するコードが、ここにあります。