Accessの抽出条件についてお探しですね。
広告
Accessクエリの抽出条件テクニック集|あいまい検索(Like)から日付範囲指定まで
Microsoft Access(以下、Access)でデータベースを管理していると、たくさんのデータの中から「これだ!」というレコードだけを取り出したい場面が必ず出てきます。
「お客さんの名前、一部しか覚えてないな…」とか「この期間の売上だけ見たいんだけど」といった、よくある要望に応えてくれるのが、クエリの「抽出条件」という機能です。
でも、Excelのフィルターとは違って、Accessには独特のルールや書き方があるので、「思った通りにデータが出てこない!」と悩んでいる人も多いんじゃないでしょうか。
この記事では、実際の仕事でよく使う「あいまい検索」から、毎回入力しなくても済む「日付の自動指定」まで、すぐに使えるテクニックをわかりやすく紹介していきます。
データ型による「囲み文字」の基本ルールとエラーを防ぐコツ
Accessのクエリデザイン画面で抽出条件を入力するとき、まず押さえておきたいのが「データ型に合わせた囲み文字の使い分け」です。
ここを間違えると、条件が無視されたり、「抽出条件でデータ型が一致しません」なんてエラーが出たりします。
Accessは、入力された値が「文字なのか」「日付なのか」「数字なのか」を、この囲み文字で判断しているんですね。
Access側で自動的に補ってくれることもありますが、複雑な条件を書くときは自分で正しく記述する必要があります。
まずは次の3つの基本パターンをしっかり覚えましょう。
* **テキスト型(短いテキストなど):** 値を半角のダブルクォーテーション(`”`)で囲みます。
例:`”東京”`、`”株式会社A”`
* **日付/時刻型:** 値を半角のシャープ(`#`)で囲みます。
例:`#2023/04/01#`
* **数値型・通貨型:** 囲み文字は不要です。
数字だけ書けばOKです。
例:`1000`、`50`
特に気をつけたいのが日付型です。
Excelみたいに何も考えずに `2023/4/1` と入力してしまうと、Accessはこれを日付じゃなくて「2023 ÷ 4 ÷ 1」という計算式だと思ってしまいます。
結果、意図しない数値(約505.75)として処理されてしまうんです。
クエリを実行しても該当データが一件も出てこないときは、まずこの囲み文字が正しいかチェックしてみてください。
あと、郵便番号や電話番号のように見た目は数字でもデータ型がテキストの場合は、ダブルクォーテーションで囲む必要があります。
これも意外と忘れがちなポイントです。
「Like演算子」とワイルドカードで実現するあいまい検索
実際の仕事で、お客さんの名前や商品名を一字一句間違えずに入力して検索できることって、ほとんどないですよね。
たいていは「確か『産業』って入ってたような…」みたいな曖昧な記憶を頼りに探すことになります。
こういう「あいまい検索(部分一致)」を可能にするのが、「Like演算子」と「ワイルドカード」の組み合わせです。
ワイルドカードっていうのは、「何でもいいよ」を表す特殊な記号のこと。
Accessでは主にアスタリスク(`*`)を使います。
これは「0文字以上の何か」を意味していて、キーワードの前後に置くことで、柔軟な検索ができるようになります。
一番よく使うのが、キーワードの前後にアスタリスクを置く「部分一致」です。
たとえば抽出条件に `Like “*産業*”` と書けば、「東京産業」「産業振興会」「第一産業株式会社」など、名前のどこかに「産業」が含まれているものがすべてヒットします。
逆に、頭が特定の文字で始まるデータだけ欲しいときは `Like “東京*”`(前方一致)、お尻が特定の文字で終わるデータだけ欲しいときは `Like “*株式会社”`(後方一致)という書き方をします。
これらを使い分けることで、余計なデータを減らして、目当てのものをサッと見つけられます。
もうちょっと応用的な使い方として、「~を含まない」データを探したいこともありますよね。
そんなときは `Not Like “*キーワード*”` と書きます。
たとえば、住所録から「東京都」以外のお客さんを抽出したいなら `Not Like “東京都*”` と指定すれば、東京以外の道府県のデータだけが出てきます。
Like演算子はすごく便利なんですが、データ量が多いテーブルで頭にワイルドカード(`*キーワード`)を使うと、検索が遅くなることもあるので、その点だけ頭の片隅に置いておくといいでしょう。
数値や日付を自由に操る「範囲指定」と「比較演算子」のワザ
「この期間だけ」とか「この価格帯だけ」といった「範囲指定」も、クエリを作るうえで欠かせないテクニックです。
範囲を指定する方法は大きく分けて2つあります。
「Between演算子」を使う方法と、「比較演算子(不等号)」を使う方法です。
それぞれの特徴を理解して、状況に応じて使い分けられるようになると、メンテナンスしやすいクエリが作れます。
「Between演算子」は `Between A And B` という形で書いて、AからBまでの範囲を取り出します。
たとえば `Between 1000 And 5000` と書けば、1000以上5000以下のデータが抽出されます。
とても読みやすくてわかりやすい書き方ですが、注意点として「境界値を含む(以上・以下)」という動きになることを覚えておきましょう。
日付の場合なら、`Between #2023/04/01# And #2023/04/30#` と書けば、4月1日から4月30日までのデータが対象になります。
一方、「比較演算子」を使うと、もっと細かい条件設定ができます。
`>=`(以上)、`<=`(以下)、`>`(より大きい)、`<`(未満)、`<>`(等しくない)といった記号を使います。
たとえば、「2023年4月1日以降」のデータが欲しいなら `>=#2023/04/01#` と書けばOKです。
また、複数の条件を組み合わせることもできます。
デザイングリッドの「抽出条件」行に条件を並べて書くと「AND条件(かつ)」になり、行を変えて「または」行に書くと「OR条件(または)」になります。
* **AND条件(同じ行):** `>=#2023/04/01#` と `<#2023/05/01#` を同じ行に書くと、4月1日以上かつ5月1日未満(つまり4月分)のデータが抽出されます。 * **OR条件(違う行):** `="東京"` を1行目に、`="大阪"` を2行目(または行)に書くと、東京または大阪のデータが抽出されます。
毎回の日付入力を自動化する「Date関数」活用法
いつも同じような作業でクエリを使う場合、毎回手動で日付を書き換えるのって面倒ですよね。
しかも入力ミスの元にもなります。
「今月の売上」とか「先週の出荷データ」みたいに、実行するタイミングに合わせて自動的に対象期間を変えたいときは、Accessに最初から入っている「日付関数」を活用しましょう。
決まった日付じゃなくて関数を抽出条件に書いておけば、クエリを開くたびにシステムの日付に基づいて自動的に抽出してくれます。
一番基本になるのが `Date()` 関数です。
これは「今日の日付」を返してくれます。
たとえば、抽出条件に `Date()` と書けば、クエリを実行した当日のデータだけが表示されます。
さらに `Date()-1` とすれば「昨日」のデータ、`Date()-7` とすれば「一週間前」の日付を指定したことになります。
これらを比較演算子と組み合わせれば、「過去30日間のデータ」なら `>= Date()-30` みたいに、メンテナンス不要の条件式が作れます。
さらに実務で役立つのが、`Year()`、`Month()`、`DateSerial()` といった関数を組み合わせた「当月」や「先月」の指定です。
たとえば、売上日が「今月」のデータだけを常に表示させたい場合、抽出条件に次のような式を設定するのが一般的です。
* **今月のデータを抽出する条件式の例**
`Between DateSerial(Year(Date()), Month(Date()), 1) And DateSerial(Year(Date()), Month(Date()) + 1, 0)`
この式はちょっと複雑に見えるかもしれませんが、分解すると理屈は簡単です。
`DateSerial` 関数を使って「今月の1日」から「翌月の0日(=今月の末日)」までの範囲を自動で計算させています。
こうやって書いておけば、月が変わってもクエリの条件を修正する必要はまったくありません。
Accessのクエリを使いこなすっていうのは、単にデータを出すだけじゃなくて、こういった関数を駆使して「未来の自分の作業時間を減らす」ことでもあるんです。
まずは簡単な `Date()` 関数から試してみて、少しずつ動的な範囲指定にチャレンジしてみてください。
広告
