Accessのあいまい検索についてお探しですね。
広告
Accessのあいまい検索を使いこなそう!Like演算子と「*」の使い方
Accessで顧客名や商品名を検索するとき、「正式な名前を全部覚えてない…」「一部の文字だけで探したい」ってこと、ありますよね。
そんなときに便利なのが、**Like演算子**と**ワイルドカード**を使った「あいまい検索」です。
この記事では、Accessクエリでよく使う「**\***」の意味から、前方一致・後方一致・部分一致の書き方、SQLビューやVBAで使うときのコツまで、わかりやすく解説していきます。
1. あいまい検索って何?Like演算子の基本を知ろう
Accessでデータを探すとき、一番シンプルなのは「完全一致」の検索です。
たとえば顧客名の条件に `”山田太郎”` と入力すると、山田太郎とぴったり一致する人だけが表示されます。
でも実際には、名前や会社名を正確に覚えていないことも多いですよね。
「山田って付く人」「株式会社で始まる会社」「東京が入ってる住所」みたいに、**一部の文字を手がかりに探したい**場面がよくあります。
こういう検索方法を、Accessでは「**あいまい検索**」とか「**部分一致検索**」と呼んでいます。
このあいまい検索で活躍するのが、**Like演算子**です。
「=」が完全一致を意味するのに対して、Likeを使うと「この文字で始まる」「この文字を含む」「この文字で終わる」といった、柔軟な条件が指定できるんです。
クエリのデザインビューなら、検索したいフィールドの「抽出条件」の欄に、たとえば `Like “*東京*”` って入力するだけ。
ここで大事になるのが、**ワイルドカード**という特殊な記号です。
ワイルドカードは「どんな文字でもOK」を表す記号で、Accessでは「**\***」がよく使われます。
`*` は「**0文字以上の何でもいい文字列**」を意味するので、`Like “*東京*”` と書けば、前後にどんな文字があっても、途中に「東京」が入っていればヒットします。
つまり、東京都、東京支店、東東京営業所なんかをまとめて検索できるってわけです。
あいまい検索を使いこなすコツは、Like演算子そのものより、**ワイルドカードをどこに置くか**を理解することです。
同じ「東京」を探す場合でも、
– `Like “東京*”` → 東京で**始まる**データ
– `Like “*東京”` → 東京で**終わる**データ
– `Like “*東京*”` → 東京を**含む**データ
という違いが出てきます。
この使い分けができると、「検索結果が多すぎる!」とか「全然ヒットしない…」といった失敗を防げるようになりますよ。
2. ワイルドカード(*)の使い方と検索パターン
Accessクエリで最初に覚えたいワイルドカードは、アスタリスク「**\***」です。
`*` は何文字でもOKを表すので、あいまい検索のほとんどはこれだけで対応できます。
たとえば、顧客名から「田中」で始まる名前を探したいときは、抽出条件に `Like “田中*”` と入力します。
すると、田中一郎、田中商店、田中…といったデータが抽出されます。
`*` は0文字でもOKなので、「田中」だけのデータも対象になります。
逆に、**文字列の最後**が特定の言葉で終わるデータを探したいときは、検索語の**前**に `*` を付けます。
たとえば会社名で `Like “*株式会社”` と指定すると、山田株式会社、東京販売株式会社のように、最後が株式会社で終わるデータを抽出できます。
ただし、株式会社山田みたいに先頭に株式会社があるデータは引っかかりません。
このように、ワイルドカードを前に置くか後ろに置くかで、結果はガラッと変わります。
一番よく使うのは、検索語の**前後に `*` を付ける**部分一致検索です。
たとえば住所フィールドに `Like “*大阪*”` と指定すると、大阪府大阪市、東大阪市、大阪営業所など、「大阪」を含むデータを幅広く拾えます。
入力がバラバラなデータベースでは、この部分一致検索がめちゃくちゃ役立ちます。
ただし、条件が広すぎると余計なデータも混ざりやすいので、結果を見ながら調整していくのがコツです。
代表的な書き方をまとめると、こんな感じです。
| やりたいこと | 書き方の例 | 抽出されるデータ |
|—|—|—|
| 前方一致 | `Like “東京*”` | 東京本社、東京都、東京営業所 |
| 後方一致 | `Like “*東京”` | 東東京、営業部東京 |
| 部分一致 | `Like “*東京*”` | 東京都、東京支店、北東京エリア |
| 完全一致 | `”東京”` または `Like “東京”` | 東京のみ |
`*` 以外にも、Accessにはいくつかワイルドカードがあります。
`?` は任意の1文字、`#` は任意の数字1文字を表します。
`[A-C]` みたいに角かっこを使うと、指定した範囲内の1文字に一致する条件も作れます。
たとえば `Like “A#”` なら、A1、A2、A9のような2文字のコードを探すときに使えます。
とはいえ、普段の顧客名検索や商品名検索では、圧倒的に `*` の出番が多いです。
まずは**前方一致・後方一致・部分一致**の3パターンをしっかり覚えておけばOKです。
3. デザインビュー・SQLビュー・VBAでの書き方
AccessでLike演算子を使う方法は、主に**クエリデザインビュー**、**SQLビュー**、**VBA**の3つに分かれます。
初心者がまず使うのは**クエリデザインビュー**ですね。
クエリをデザインビューで開いて、検索したいフィールドをグリッドに追加したら、そのフィールドの「抽出条件」の欄に `Like “*検索語*”` の形で入力します。
たとえば商品名から「プリンタ」を含む商品を探すなら、抽出条件は `Like “*プリンタ*”` です。
入力してクエリを実行すると、商品名のどこかにプリンタが入っているレコードが表示されます。
**SQLビュー**で書く場合は、WHERE句の中でLike演算子を使います。
たとえば顧客テーブルから住所に「新宿」を含むデータを抽出するSQLは、こんな感じです。
“`sql
SELECT *
FROM 顧客
WHERE 住所 Like “*新宿*”;
“`
SQLビューなら、どのフィールドにどんな条件を指定しているかが文として見えるので、複数の条件を組み合わせるときに便利です。
たとえば顧客名に「山田」を含んで、かつ住所に「東京」を含むデータを探す場合は、`AND` でつなげます。
“`sql
WHERE 顧客名 Like “*山田*” AND 住所 Like “*東京*”
“`
こうすれば、両方の条件を満たすレコードだけを抽出できます。
デザインビューで作った条件をSQLビューで確認すると、Accessが内部でどんなSQLに変換しているかがわかって勉強になりますよ。
**VBA**でLike演算子を使う場面もあります。
たとえばフォーム上の検索ボックスに入力された文字をもとに、顧客名を部分一致で絞り込むときは、こんなコードになります。
“`vba
Me.Filter = “顧客名 Like ‘*” & Me!txt検索 & “*'”
Me.FilterOn = True
“`
VBAでつまずきやすいのは、**ダブルクォーテーション**と**シングルクォーテーション**の使い分けです。
VBAの文字列全体はダブルクォーテーション(`”`)で囲んで、その中でAccessの条件として文字列を指定する部分にはシングルクォーテーション(`’`)を使うと整理しやすいです。
上の例で検索ボックスに「佐藤」と入力されていれば、実際には `顧客名 Like ‘*佐藤*’` という条件が作られます。
クエリで直接書く場合と考え方は同じですが、VBAでは文字列を連結して条件式を組み立てている点が違います。
ちなみに、検索語にシングルクォーテーションが含まれる可能性がある場合は、条件式が壊れることがあるので注意が必要です。
また、検索ボックスが空欄のまま `Like “**”` みたいな条件になると、ほぼ全部のレコードが対象になっちゃいます。
フォーム検索を作るときは、空欄のときはフィルターを解除する、または検索しない、といった処理を入れておくと使いやすくなりますよ。
4. 失敗しやすいポイントと実務での注意点
AccessクエリでLike演算子がうまく動かないとき、まず確認したいのは**記号の種類**です。
`Like`、`*`、`”` などは基本的に**半角**で入力します。
全角のアスタリスク(*)や全角の引用符(”)を使うと、Accessがワイルドカードや文字列の区切りとして正しく解釈できないことがあります。
また、`Like “*東京*”` のように、検索文字列全体を引用符で囲む必要があります。
デザインビューならAccessが自動で補正してくれることもありますが、意図しない条件になってないか確認する習慣を持っておくと安心です。
次に注意したいのが、**SQLモードによるワイルドカードの違い**です。
Accessの標準的なクエリでは、任意の文字列を表すワイルドカードとして `*`、任意の1文字として `?` を使います。
これはAccessで一般的な**ANSI-89形式**の書き方です。
一方、SQL Server互換の**ANSI-92形式**やADO接続を使う場面では、任意の文字列に `%`、任意の1文字に `_` を使うことがあります。
普通のAccessクエリだけなら `*` を覚えておけば十分ですが、VBAでADOを使ってSQLを実行する場合や、外部データベースと連携する場合は、ワイルドカードの形式が違う可能性を疑ってみてください。
また、Like検索は文字列のパターンを探す機能なので、**数値型や日付型**のフィールドに安易に使うと、期待どおりの結果にならないことがあります。
たとえば日付フィールドから「2024年のデータ」を探すために `Like “2024*”` と書くより、日付型として `Between #2024/1/1# And #2024/12/31#` のように範囲指定するほうが正確です。
Likeは主に**テキスト型フィールド**で使うもの、と考えておくと判断しやすくなります。
検索結果が多すぎるときは、**ワイルドカードの位置を見直す**のが効果的です。
`Like “*田*”` みたいに1文字だけで部分一致検索をすると、田中、山田、成田、田町…など、めちゃくちゃたくさんヒットします。
必要に応じて `Like “田中*”` のような前方一致に変える、別のフィールド条件をANDで追加する、検索語を長くするなどの工夫をしましょう。
逆に結果が少なすぎる場合は、前方一致や後方一致になってないか、**全角・半角やスペースの違い**がないかを確認します。
Accessでは「東京」と「 東京」(先頭にスペース)のように、スペースがあるデータは別物として扱われるため、データ入力のばらつきも検索結果に影響します。
実務では、Like演算子は単なる検索機能じゃなくて、**入力ミスや表記ゆれを吸収しながら必要なデータを見つける**ための大事な道具です。
顧客名、商品名、住所、部署名、備考欄など、文字列を扱うフィールドでは特に効果を発揮します。
まずは `Like “*検索語*”` の部分一致検索から始めて、慣れてきたら前方一致・後方一致・複数条件・フォーム検索へ広げていくと、Accessクエリの活用範囲がグッと広がりますよ。
Like演算子とワイルドカード(*)の使い方をマスターすれば、膨大なテーブルの中から必要なレコードをサクッと見つけられるようになります。
ぜひ実際に試しながら、あいまい検索を使いこなしてくださいね!
広告
