こんにちはmasalifeです。
近々、社内でAccess・Excelを中心としたMicrosoft Office勉強会を開催しようと思っています。
どのような勉強会にしようかはまだ模索中なので
まずは1つ1つの機能を説明する資料作りを兼ねて記事を書こうと思いました。
今後、勉強会で出た質問内容に対する回答や機能説明の記事もどんどんUPしていきたいと思っていますので、引き続きお付き合いしていただければ幸いです。
さて、今回のテーマは
「Accessのクエリを理解する」
です。
Accessを使って、アプリケーションを作る・データ加工をするにしてもクエリを理解しなければ話になりません。
それだけ大事な機能です。
そもそもクエリって何なの?
という初心者の方のためにクエリの概要を紹介したいと思います。
クエリの概要
クエリの機能はデータの抽出・加工です。
データという表現をしていますが、Accessにはテーブルというデータを格納する機能があるので
テーブルに格納しているデータ(=レコード)の抽出・加工
と言った方が分かりやすいでしょう。
そして、その機能(抽出・加工)ごとに名前が付いています。
・追加クエリ
・更新クエリ
・削除クエリ
・テーブル作成クエリ
・クロス集計クエリ
・ユニオンクエリ
選択クエリ
一番よく使用するクエリです。
選択クエリはレコードを抽出・加工して表示する機能です。
表示する機能のためフォームのコントロールソールにも指定できます。
使用例を見てみましょう。
使用例① ~抽出条件を設定して表示する~
次のように、お客さんの来店情報が累積されている【T_来店情報_累積】があります。
このテーブルから2020年7月1日~2020年7月31日の情報だけ表示したいとします。
特定の期間を抽出し、表示するので選択クエリを活用します。
【作成】タブの【クエリデザイン】をクリックします。
規定では選択クエリが指定されていますので
【T_来店情報_累積】のテーブルを表示し、【日付】フィールの抽出条件を
【T_来店情報_累積】から来店者・住所・購入物のレコードだけを表示したいとします。
特定のフィールドを指定し、表示するので選択クエリを活用します。
【作成】タブの【クエリデザイン】アイコンをクリックします。
来店者・住所・購入物それぞれの項目をダブルクリックします。
実行すると
来店者・住所・購入物のレコードのみが表示されていますね。
追加クエリ
追加クエリは別のテーブルに別のレコードを追加する機能です。
使用例と注意点を見てみましょう。
使用例~テーブルのレコードを別のテーブルに追加する~
2020年8月の来店情報が管理されているテーブル【T_来店情報_2020年8月】のレコードを、2020年7月以前までの来店情報が管理されているテーブル【T_来店情報_累積】のレコードに追加したいとします。
テーブルのレコードを別のテーブルに追加するので追加クエリを使用します。
【作成】タブの【クエリデザイン】アイコンをクリックします。
別のテーブルに追加したいフィールドを指定し、【追加】アイコンをクリックします。
追加先テーブルを指定します。
今回の場合は【T_来店情報_累積】に追加したいので【T_来店情報_累積】を選択し、【OK】ボタンをクリックします。
追加クエリの設定ができました。
補足点として、今回の場合は追加元と追加先のフィールド名が同じなので、自動でレコードの追加先(赤枠部分)を指定してくれました。
フィールド名が異なる場合は、レコードの追加先(赤枠部分)が空白となるため、手動でレコードの追加先を指定してください。
実行すると
2020年8月の来店情報が追加されていますね。
追加クエリの注意点①~実行した回数分追加される~
追加クエリは実行した回数分レコードが追加されます。
5件のレコードを追加する追加クエリを2回クリックした場合は、同じ内容のレコードが5件重複してテーブルに格納されてしまいます。
グループ化を使えば重複データは取り除けますが
テーブルはすべての元になるため、無駄や不備のレコードは極力存在しないようにしなければなりません。
VBAで自動化の仕組みを構築する際は複数回追加クエリが実行されないように制御をかけてください。
追加クエリの注意点②~追加元と追加先のデータ型を一致させる~
追加元と追加先のテーブルのデータ型は一致していないとレコードが追加されません。
追加元が「数値型」であれば追加先も「数値型」を選択してください。
・自動化するのであれば、複数回実行されないように制御をかける
・追加元と追加先のテーブル構造を必ず確認する
更新クエリ
更新クエリはテーブルのレコードをまとめて変更する機能です。
使用例と注意点を見てみましょう。
使用例①~すべてのレコードをまとめて変更する~
次のように、商品の価格が管理されている【T_価格表】があります。
消費税増税に伴い、このテーブルの商品の価格を一律10%上げなければなりません。
すべての商品の価格を変更するので更新クエリを活用します。
【作成】タブの【クエリデザイン】アイコンをクリックします。
変更したいフィールドを指定し、【更新】アイコンをクリックします。
更新したい内容(赤枠部分)を入力します。
実行すると
価格が10%上がっていますね。
使用例②~特定のレコードを指定して変更する~
商品Cの価格のみを10%上げてみましょう。
特定のレコードのみを変更することも更新クエリでできます。
【作成】タブの【クエリデザイン】アイコンをクリックします。
商品フィールドから商品Cのデータだけ価格を変更するので
商品と価格のフィールドを指定します。
【更新】アイコンをクリックします。
更新したい内容(青枠部分)(赤枠部分)を入力します。
整理すると、【T_価格表】の商品フィールドにはA・B・Cがあり、Cのレコードのみを更新するため、抽出条件にCを指定しています。
実行すると
Cの商品だけが10%上がっていますね。
更新クエリの注意点①~実行した回数分更新される~
更新クエリは実行した回数分更新されます。
AをBに更新するといった内容の場合は問題となりにくいですが
今回の使用例のように、○%分増やすといったような演算をする場合は、実行した回数分、演算が実行されてしまいますので注意が必要です。
更新クエリの注意点②~更新する前にバックアップを取る~
一度更新してしまうとデータを元には戻せません。
そのため更新クエリを実行する前にはバックアップとしてテーブルをコピーしといてください。
・何をどのように変更するのかを意識する
・自動化するのであれば、複数回実行されないように制御をかける
・間違えやすいため、実行前にはバックアップを取る
削除クエリ
削除クエリはテーブルのレコードをまとめて削除する機能です。
使用例と注意点を見てみましょう。
使用例①~テーブルのレコードを初期化する~
商品改定に伴い、商品と価格を再度設定するためにテーブルの中身を空にしましょう。
レコードを空にするので削除クエリを活用します。
【作成】タブの【クエリデザイン】アイコンをクリックします。
今回はテーブルの中身を空にするので*をダブルクリック(赤枠)します。
T.価格表.*はT.価格表のすべてのフィールドを指定するという意味です。
【削除】アイコンをクリックします。
商品と価格のフィールドを指定しても結果としてテーブルの中身を空にできます。
しかし、フィールドが多いテーブルだと特定のレコードだけ削除(使用例②で説明)
しているのか、すべてのレコードを削除しているのか一目で判断できません。
メンテナンスの観点から、すべてのレコードを削除する場合は
一目で分かる*を使用するのが望ましいです。
実行すると
テーブルの中身が空になっていますね。
使用例②~特定のレコードを指定して削除する~
Cの商品が廃番となったことから、Cを削除してみましょう。
【作成】タブの【クエリデザイン】アイコンをクリックします。
商品Cのレコードを削除するので商品フィールドを必ず指定します。
その他のフィールドは指定してもしなくてもどちらでもかまいませんが、削除する前に削除するデータの内容を確認することは重要なので、すべてのフィールドを指定するのがいいと思います。
【削除】アイコンをクリックします。
削除したい内容(青枠部分)を入力します。
削除クエリでは実行する前に、正しく削除したいデータが抽出できているかを確認してください。
右下のアイコン(赤枠)をクリックし、データシートビューに切り替えます。
正しくCのレコードのみが指定できています。
右下のアイコン(赤枠)をクリックし、デザインビューに切り替え、実行します。
Cの商品レコードが削除されていますね。
・抽出条件で削除したいレコードを指定する
・実行する前に、正しく削除したいデータを指定できているか確認する
削除クエリの注意点~削除する前にバックアップを取る~
削除してしまったデータを元に戻すことはできません。
そのため削除クエリを実行する前にはバックアップとしてテーブルをコピーしといてください。
取り扱いには細心の注意が必要です。
・何を削除するのかを意識する
・削除したいデータが正しく指定できているかを実行前に確認する
・削除する前にはバックアップを取る
テーブル作成クエリ
テーブル作成クエリは条件に合うレコードを新しいテーブルとして作成する機能です。
使用例と注意点を見てみましょう。
使用例~条件に合うレコードをテーブルとして作成する~
お客さんの来店情報が累積されている【T_来店情報_累積】から
7月1日~7月31日の期間のレコードを抽出し、テーブルとして保存してみましょう。
【作成】タブの【クエリデザイン】アイコンをクリックします。
【日付】フィールドの抽出条件を
テーブル作成クエリの注意点~作成するテーブル名に注意する~
テーブル作成クエリは追加クエリ・更新クエリと異なり、テーブルのレコードを変更するわけではありません。
そのため、比較的安全に使用できるクエリといえます。
ただ、既存あるテーブル名と同じテーブル名で作成した場合は既存のテーブルに上書きされてしまいます。
既存のテーブル名を確認して使用してください。
・同じ名前で作成すると上書きとなってしまう
さいごに
今回紹介したクエリがどういったことをするものか何となく分かっていただけたのではないでしょうか?
クエリは本当に奥が深いものです。
クエリを使って複雑なデータ加工をするためには、関数・リレーションシップと組み合わせることが必要になってきます。
特にリレーションプについては感覚をつかむまで時間がかかります。
いきなり難しいことを覚えようとすると、途中で嫌になる(何回も嫌になりました……)と思うので、まずは簡単なところから着実に使えるようになってください。
一緒に勉強頑張りましょう!!
最後まで見ていただきありがとうございました。