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をグループとして、そのレコード数をカウントして、集約して抽出する。

こんな感じでしょうか?

ちなみに、ご視聴者様から質問も来たので、その質問も合わせて、下記に記載します。

ご視聴者様からの質問
いつも動画配信、ありがとうございます!井川さんの動画でACCESSへの抵抗が少し薄らいできて、最近、ACCESSのVBAのMOS試験勉強をしようと頑張っております。かなり初歩的な質問ですみません、動画内のサブクエリのSQLのグループ化の後のhavingの後のCount(1)とはどういう意味なのでしょうか?フィールドの数を数えているのは、何となくイメージできるのですが、具体的に何のフィールドをカウントしているのでしょうか?

サブクエリ 作業手順 その5 クエリごと、Excelへ転送する

ACCESSから、Excelへ転送する一番カンタンなコードです。


Microsoft ActiveXData Objects 6.1 Libraryにチェックを入れます。

これが、ACCESSから、Excelへ転送するための、おまじないです。


上記が、ACCESSから、Excelへ転送するためのコードです。

基本、飯田式_2を変更することで、コピペで再利用可能です。



データ転送完了です。

ここがポイント

ここがポイント
Function8.png
今回は、サブクエリをExcelに転送する内容でした。ACCESSSのフォームでVBAを実行するより、Excelに転送した方が、はるかに汎用性があります。転送することは、難しいようですが、コピペで対応できます。

しかし、なんでもかんでも、転送すれば良いというものではありません。

TPOを考えてコードを記載しましょう。

動画とブログでわかりやすくExcelとACCESSを紹介しています
created by Rinker
¥2,948 (2020/11/27 13:57:14時点 Amazon調べ-詳細)

まとめ

同一グループ内というのは、みなさんの会社では、各部署ごとの数字という事になります。

Excelで思いつくのは、連想配列ですが、連想配列は、決してカンタンではありません。

むしろ難しいと思います。

しかし、ExcelとACCESSが連携すれば、連想配列など、知らなくてもできます。

ぜひ、ExcelとACCESSの連携を覚えて、業務を楽にしてください。

今回のサンプルファイルは、ありません。

サンプルファイルを購入希望の方はココをクリック
サンプルファイル
VBAを勉強中の悩みを解決
  • なんで動かないの?
  • もうやだ!
  • どこにも情報がない!
スポンサーリンク

Twitterでフォローしよう

おすすめの記事