ACCESSを利用するにあたり、難しいけど、覚えておいたほうがいい技があります。

その内の1つがサブクエリになります。

ACCESSを極めるには、クエリだということがよく分かると思います。

データベースに入力されたものを、いかに抽出するか?

ココがキモとなります。

スポンサーリンク

サブクエリをVBAで実行

こんにちは。伊川(@naonaoke)です。
以前に、競馬ネタをもとに、SQL文で、サブクエリを紹介しました。

実務でもあるあるだと思いますが、全体の中の位置付けではなく、部署毎、グループ毎等の順位、成績が必要となるときがあります。
学校の成績でも、クラス毎、学年毎というように、それぞれの母体を基準とする場合です。
競馬なら、各レース毎に、調教が優秀な馬を選びなさいという場合です。
Excelでやるとなると、結構面倒ですが、ACCESSは、SQL文にGROUP BYと句を使うだけなのです。
連想配列や、複雑なVBAを考える必要がありません。
必要なクエリさえ作ってしまえば、あとは、Excelに転送するだけなのです。

Naosuke
下記の記事が
ExcelとACCESSの連携での、基本です。

 

スポンサーリンク

このブログはこんな人にお勧め

今回のテーマ
  • クエリを勉強していて、さらに複雑なクエリを勉強したい人
  • 各グループ毎に集計を算出したい人
  • ACCESSのVBAを勉強している人

 

このブログを、読み終わるころには・・・・

ACCESSのVBAで、SQL文も書けるということが理解できます。
もちろん、ExcelVBAでもSQL文を記載することができますが、稀なケースだと思います。
VBAでもSQL文が記載できるようになると、もっと便利になると思います。

 

 

スポンサーリンク

サブクエリ

サブクエリは、副問合せと言われています。

副問い合わせとは、なじみのない言葉です。
端的にいうと、クエリの中にクエリを作成するイメージです。

スポンサーリンク

Aグループというクエリを作成する
作成したクエリから、売上のベスト3を抽出するというものです。
クエリの中にクエリを作成するというのはピンと来ないと思います。
しかし、これが超便利なのです。

サブクエリをVBAで実行 作業手順 その1 データベース確認


このような、データベースがあります。

抽出条件
地域毎
IDの1が、100以上
IDの2が、60以上
IDの3が、20以上

この条件で抽出したいと思います。
SQL文のみで、実行する場合は下記のSQL文になります。

クエリのデザインビューで記載する場合には、少し書き方が異なります。
In(処理をしたいSQL文)で書きます。

 

 

そうすると、条件を満たしているのは、大阪のみです。
抽出完了となります。

サブクエリをVBAで実行 作業手順 その2 VBAで実行する前の下準備



このように、中身は、空でも問題ありません。

サブクエリをVBAで実行 作業手順 その3 VBAで実行

test_2のコードは、標準モジュールに記載します。


SQL文を図解すると上記のようになります。

サブクエリをVBAで実行 作業手順 その4 下準備のクエリを作成するのが面倒というあなたへ

しかし、ここまで来て、クエリの準備をやりたくないという人がいると思います。
なんでも、かんでも、自動にすると、人間は、ダメ野郎になります。
しかし、言っていることが理解できないでもないです。
そう、その面倒から解放されたいと思う気持ちは、間違いなくVBAのスキル向上になります。
では、空のクエリを作成する、VBAを実行してから、サブクエリを実行すればいいじゃないか?
その通りです。
じゃ、どうすればいいのか?

サブクエリをVBAで実行 作業手順 その5 すでにQ_test_2が存在していたらどうなるか?

当然エラーになります。

頭にきた!
もう、やってらんねぇ。

Naosuke
VBAを作成するときは、常に沈着冷静でいましょう。

では、このデバックを回避するにはどうすればいいのか?

赤枠の2つのコードを記載することで、デバックは回避されます。

サブクエリをVBAで実行 作業手順 その6 完成したのに、インネンを付ける上司


完成しましたが、なんか気持ち悪いですよね。
そう、収入の多い順にならんでいないということです。
このようなモノを上司に提出すると、インネンを付けられ、あなたの評価が下がります。

えーい、面倒だ、手動でやってしまえ!と思ったあなた。
いけませんね。最後まで、ボタン一発でやるのです。
でも、SQL文が、わかんねーし!

Naosuke
VBAで、出来ないことはありません。
知らないだけです。

隠れたACCESSの便利な機能は、SQL文を教えてくれる


この状態で、SQLビューを開いてください。

ACCESSが、SQL文を教えてくれました。
ここのコードをどこに、差し込むのでしょうか?

こんな感じで記載します。

エラーが出ました。
やってらんねぇじゃないですよ。
ACCESSは、親切にも、日本語で、エラー内容を教えてくれましたが、意味が分かりません。


クエリの【;】は、SQL文の終わりを意味します。
SQL文おわっているにも関わらず、何で、strSQL = strSQL & “ORDER BY MT_test.収入 DESC;という言葉あるけど、これって文字だよね?
これが、ACCESSが怒っている原因なのです。

だから、片方を削除します。

Naosuke
VBAを勉強していて、意味不明なエラーは、ほとんどが、イージーミスです。
根気よくNET等でしらべてください。


これで本当の意味での完成です。

ここがポイント

ここがポイント
Function8.png
今回は、サブクエリをVBAで実行するコードを紹介しました。
また、すべてが、ボタン一発でできるように作成しました。
こんな要望は、みなさんの会社であるあるだと思います。
エラーが出るたびに、文句を言われると、じゃ、お前がやれとなりますが、いったん冷静になりましょう。
私たちより、はるかに頭の良い人が考えたモノです。
エラー等を回避する方法がないわけがありません。
今回は、test_2~test5まで作成しました。
この過程を記録しましょう。
思い出すのはコードではなく、コードを見て、どのような解決をしたのかを、思い出すのがVBAのスキルアップの方法です。
そこを考えると、すべて、3クリック~5クリックで完了できるシステムが作成できます。
これが、VBAの醍醐味だと、私は思っています。
動画とブログでわかりやすくExcelとACCESSを紹介しています

まとめ

関連記事で紹介しましたが、これも競馬から発展したものです。
この動機付けが、重要なのです。
犯罪に触れないかぎり、私は、動機はなんでもいいと思っています。
得た知識が、正しい方向に向かえば、いいのです。
ダイナマイトも同じで、トンネルを掘るためにつかうのか、戦争に使うのかです。
そのスキルを正しい方向で利用するのも、VBAのスキルなのです。
また、今回はサンプルファイル購入の方には、動画で紹介していないコードも掲載しています。
ぜひ、ダウンロードして、異なる書き方も勉強してみてください。
きっと、新しい発見があると思います。
その発見で、どんどん感動して、どんどんコードを書いてみてください。
今回も最後まで読んでいただき、ありがとうございました。
今回のサンプルファイルは、No230です。

サンプルファイルを購入希望の方はココをクリック
毎日の業務が、3時間短縮できます

わからない事を延々と考えるのは、無駄です。

  • なんで作動かないの?
  • もうやだ!VBAなんか嫌い!
  • ネットで調べても情報がない!

必ず作動するコードが、ここにあります。

スポンサーリンク

Twitterでフォローしよう

おすすめの記事