ExcelとAccessのスキルアップをサポートするサイトです

ExcelとAccessの学習室

【Accessクエリ入門】3回目-抽出条件を設定する

この記事で学習できること
  • どのような条件でAccessの中のデータを抽出できるかが分かる
  • Accessクエリのデザインビューを使った抽出条件の書き方が分かる

現在Accessクエリの使い方について、シリーズで投稿しています。

前回の記事はこちらです。
>>【Accessクエリ入門】2回目-テーブル間の結合を設定する

3回目に当たる今回は、抽出条件を設定する方法について深掘りしてみました。

今回は選択クエリを使って抽出条件について解説していきますが、テーブル作成や更新・追加といった他のクエリでも使い方は基本的に同じです。

また、本記事では実務で使われるものをだいたい網羅してみましたので、抽出条件についての全体像が理解できます。
Accessを学習中の方がクエリの条件設定に困った場合、本記事を参考にして頂ければほとんどの疑問を解決できるでしょう。

前準備-「Select * from ~」 を意識したクエリの使い方

前準備として、本記事で行うクエリの使い方について最初に触れておきます。
それは、「 Select * from ~ 」を意識したクエリの使い方で、「実務ではよく使われる」とっても重要な内容です。

まず、市販の解説書などでよく見かけるクエリの使い方を確認してみましょう。

「クエリ1」では「T01部品マスタ」テーブルのフィールドを全て選び、抽出条件が「小分類ID=1」になるように設定しています。

「クエリ1」のSQL文を確認すると、とても長く見づらいSQL文になっていますよね?

以上が一般的なクエリの作り方でした。
デザイングリッドは量がかさんでしまい、SQL文も長文になるので、なかなか解読が大変ですよね。


一方、「Select * from ~」を意識したクエリを作る場合は、フィールドリストの上にある「*(アスタリスク)」をドラッグします。

デザイングリッドに「T01部品マスタ.*」が設定されました。

次に抽出条件を設定します。
小分類IDのフィールドを選択した後、表示のチェックを外します。

SQLビューに切り替えてみると、シンプルなSQL文になっていることが確認できます。

もちろん、全フィールドを選択したパターンと、「*」を選択したパターンは同じ結果を表示します。
同じ結果が導き出されるならば、デザインビューとSQLビューのどちらもスッキリとした「*」を使った書き方の方がいいですよね?


これから、本記事ではいろいろなクエリの抽出条件について解説を進めますが、全て「*」を使っていきます。
「*」を使った使い方を意識し続けることで、今回の学習内容を「SQL文の直接編集」と「VBAを使った自動化」に展開できます。

データ型による表記の違い

Accessクエリの抽出条件を設定するためには、「データ型によって表記の方法が違う」というルールを知っておかないといけません。

  • 数値型(Integer,Long,Doubleなど)は前後に何も加えない入れない
  • 文字列型(String)は前後を「”(ダブルクオーテーション)」か「'(シングルクオーテーション)」ではさむ
  • 日付型(Date)は「#」ではさむ
  • Yes/No型(Boolean)はTrueかFalseを書く

まずは数値型の書き方です。

文字列型で「”」を使った標準のパターンです。
文字を入力すると記号が追記されます。

「”」を「’」に置き換えても同じ結果を表示できます。
クエリで作ったSQL文をVBAに転記させる場合は、「”」ではエラーを発生させるので「‘」を使うようにしましょう。

日付型についても自動で「#」が追記されます。

Yes/No型の書き方です。自動で頭が大文字に変換されます。

Accessクエリのデザインビューでは、データ型にあわせて必要な記号を自動で追加してくれます。
クエリのみで完結する場合は何も触る必要はないのですが、VBAコードに転記する場合は状況に合わせて修正しましょう。

一方、SQLビューに直接書く場合、デザインビューのような変換機能はありませんので、より正確さが求められます。

あいまい検索を設定する

あいまい検索は、あるワードを含むデータだけを検索できる、とても便利な機能です。
「Google」や「Yahoo!」などの検索エンジンにも、あいまい検索機能が実装されています。
この記事を読んでいるみなさんも、検索エンジンのあいまい検索に日頃からお世話になっているのではないでしょうか?

Accessであいまい検索を行うためには、「like」と「*(アスタリスク)」の2つのワードを使います。
例えば「田中」という言葉をあいまい検索するためには、下の3つのパターンから選べます。

  1. 途中に検索ワードが入る(〜田中〜)→like “*田中*
  2. 文頭に検索ワードが入る(田中〜)→like “田中*”
  3. 文末に検索ワードが入る(〜田中)→like “*田中”

よく使われるのは前後に「*」を付け加えた「途中に検索ワードが入るパターン」です。
条件をより厳しめにしぼりたいときは、下の2つのうちでふさわしい方を選ぶとよいでしょう。

範囲を設定する

範囲の指定は2つの方法があります。

  • 不等号を使う( A>=100 AND A<200)
  • BETWEENを使う(BETWEEN 100 AND 200)

「未満」などのように範囲をしっかりと設定したければ不等号を、厳密さにこだわらなければ「BETWEEN」を使うとよいでしょう。

SQL文で確認する場合に、可読性が高いのは「BETWEEN」を使った範囲指定です。
まずは「BETWEEN」で条件を指定できないか検討して、無理そうなら不等号を使うという流れにしておくとよいでしょう。

関数を使った条件設定

抽出条件の設定に関数を使うのは、時間や期間を指定するときくらいでしょうか。

  • Format関数…期間を文字列にする(○年△月)
  • DateDiff関数…年、月、日の順番で日付を指定する関数
  • DateAdd関数…日付を加算する関数
  • DatePart関数…週や四半期などの値に変換

日付の指定については、このようにいろいろな関数がありますので、ふさわしいものを使いましょう。

詳しくはこちらのサイトに載っていますので、参考までにリンクを貼っておきますね。

>>クエリの抽出条件の例(Microsoft公式サイト)

>>日付・時刻関数 (Officeのチカラ)

Dlookupなど他にもいろいろなAccess関数がありますが、条件設定で無理に使う必要はありません。
SQL文を意識した条件抽出に慣れた方が、効率よく作業できて、他のデータベースへの応用も効きます。

Nullを条件設定する

Nullとは「何もデータが入っていない」という、空白の状態です。

データベースを扱う時に知っておくべき大事なことは、「0(ゼロ)」と「Null」は違うものだということです。

Excelではセルに何も入っていない「空欄」の状態を「0(ゼロ)」とみなすこともありますが、Accessなどのようなデータベースでは違う見方をします。
「Null」などのようなデータベースが持つクセをあらかじめ知っておくことが、思い通りのデータを取り出すために必要になります。

  • Nullを抽出するときは「Is Null」
  • Nullを含まないときは「Is Not Null」

未入力のレコードを探すときなど、Nullを条件設定することもよく行われます。

ちなみに、デザインビューでは「Null」を入力すると「Is Null」に、「Not Null」と入力すると「Is Not Null」に自動変換されます。

このように、Accessクエリのデザインビューでは何気なく便利な機能がちりばめられているので、うまく使いこなせることで入力の手間を減らすことができます。


たまたまこの記事を執筆中に「Null ゼロ 違い」について検索してみたところ、過去のツイートで面白いものがありましたので、参考までに載せておきます。
何となく違いのイメージもつかめるのではないでしょうか?

https://twitter.com/raysato/status/833650208642719744?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E833650208642719744%7Ctwgr%5E%7Ctwcon%5Es1_&ref_url=https%3A%2F%2Fch.togetter.com%2F2017%2F02%2F22%2F45561
https://twitter.com/onj334ngo/status/1227377857615122432

論理式の設定

「AND」や「OR」などの論理式を使いこなすためには、グリッドの使い方を知っておく必要があります。

  • 「AND」は段をそろえる
  • 「OR」 は段を変える

これがどの種類のクエリにも共通している、大事な論理式の書き方になります。

例えば、発注伝票で「鈴木さんが発注した4月の伝票」を確認したいときは、条件を入力する段をそろえましょう。
入力する段を変えてしまうと、「鈴木さんが発注した伝票」と「4月に発注した伝票」のデータがあわせて抽出されますので、想定しない結果が表示されるかもしれません。

複数の条件を抽出するときも、同じルールに沿って抽出結果が表示されます。

「鈴木さんが発注した4月と6月の伝票」を表示させたい場合は、下の図のように書きましょう。

月名に「4 Or 6」と入力し、条件を1行で済ませても同じ結果を表示されます。
より条件をシンプルに書きたい場合に使える方法ですので、論理式に慣れたらぜひ使ってみましょう。

パラメータクエリについて

これまではデザイングリッドに抽出条件を直接入れる方法を紹介しておきました。

ここで、パラメータクエリという使い方についてもかるく紹介しておきます。
パラメータクエリとは、ダイアログボックスを表示させて抽出条件を書かせる方法です。

デザイングリッドに質問文を入れて、大かっこではさみます。
データシートビューに切り替えると入力ダイアログが起動し、入力されたデータが結果に反映されます。

いろんな Accessの学習本には必ずと言っていいほどパラメータクエリの解説が載っていますが、以下の理由からパラメータクエリを実践で使う機会はほとんどないでしょう。

  • そもそもAccessを社内で開発できる人はほとんどいない
  • Runtime版では直接テーブルとクエリを開くことができない

誰でもAccessを操作できるようにするためにも、フォーム上の操作だけで完結させる必要があります。
パラメータでの条件入力より、フォームのテキストボックスやコンボボックスに担わせた方が、よりユーザーに優しい画面設計に仕上げられるでしょう。

まとめ

今回は、Accessクエリのデザインビューで抽出条件を設定する方法について解説しました。
ここで紹介したように、いろんな条件抽出のやり方がありますが、無理して全部覚える必要はありません
使いやすいものから覚えていくと確実に力になっていきますので、焦らず少しずつ慣れていきましょう。

次回は集計クエリの作り方に関する記事を投稿する予定です。

本日もありがとうございました。