ACCESS Like演算子であいまい検索する方法(クエリ VBA対応)

Like演算子であいまい検索する方法

ACCESSを使っているとクエリやVBAでデータを抽出する作業が多発します。
データを抽出する際は、必ずしも完全一致ではなく、一部だけが一致するあいまい検索を行いたい場合も多いものです。

完全一致は抽出条件の作り方が比較的簡単ですが、あいまい検索をする際にはちょっとコツが必要です。

今回はACCESSの関数やVBAであいまい検索をしたい時に使用する「Like」演算子の使い方をご説明します。


こんにちは。
はこにわガジェット (@hakoniwagadget) です。

ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSをもっと使いこなしたい方向けにACCESSの関数をご紹介していきます。

Like演算子とは

Like演算子とは、ACCESSで抽出条件を記載する際に使用する記号です。

ACCESSでは条件式を書くことが多々あります。
クエリで抽出条件を書く際は、デザインビューの画面で抽出条件欄に記載することになります。

上記の記載方法ですと顧客名が「たけもと」の人のみを抽出できます。
しかし、実務ではこうした完全一致ではなく、あいまい検索(部分一致)で抽出したい場合があります。

例えば、
・名字が「たけもと」の人を全員抽出したい
・名前の最後に「こ」が入る人を全員抽出したい
などなど。

こうした場合に利用するのがLike演算子とワイルドカードです。
条件式に「=」ではなく「Like」を利用することで自分の思い通りの抽出条件が書けるようになります。

ワイルドカード

Like演算子と合わせて使用するのがワイルドカードです。
記号を用いて表現することで、特定の文字パターンを表現することが可能です。

文字説明使用例合致非合致
*任意の数の文字を表現します。
つまり、文字数、文字種別に関係なくすべての文字が条件に合致します。
a*access,acceptbay
?任意の一文字を表現します。a?at、anaim
[]角かっこ内のどれか1文字を表現します。a[in]daid,andadd
!角かっこ内の文字以外を表現します。a[!in]dadd
範囲内の任意の文字を表現します。a[a-i]dadd,aidand
#任意の数字1文字を表現します。1#0100,110101

いろいろありますが、実務では基本的に*を使うことが多いので、これだけを覚えておけば大丈夫でしょう。

クエリでのLike演算子利用方法

実際の利用方法を、まずはクエリでの抽出条件にLikeを使用する方法からご説明しましょう。

今回は下記の顧客マスターテーブルをサンプルデータとして準備しました。

この顧客テーブルから、特定の文字を顧客名に含む顧客のみ抽出しましょう。

例えば、たけもと かずひこさんを抽出したい場合は、選択クエリで以下のように条件設定します。

これは、完全一致での抽出方法ですね。
あいまい検索で抽出したい場合は、Like演算子を使って抽出条件を記載します。

「もと」という文字が入る人を抽出するためには、抽出条件は以下となります。

Like “*もと*”

Likeの後に、テキスト型を表すダブルクォーテーション(”)で文字を囲っています。
ここで、アスタリスク(*)が文字の前後に入っているのですが、これは先ほどご説明したワイルドカードによる部分一致です。
つまり、文字の前後に何が来ても抽出条件に合致する、という意味の記号です。

クエリをデータシートビューにして結果を見てみましょう。

見事に「もと」を名前に含む人が抽出できました。

次は、最後の文字が「こ」で終わる人を抽出してみましょう。
この場合の抽出条件は以下になります。

Like “*こ”

基本的には先ほどと同じですが、今度はアスタリスク(*)が前だけにつきました。
これは、「こ」の文字の前には何が来てもよいが、最後は「こ」で終わるという条件設定になります。
後ろにもアスタリスク(*)を入れてしまうと、途中に「こ」が入る人も抽出されてしまいますのでご注意ください。

結果を表示してみましょう。

このように、最後が「こ」で終わる人だけが抽出できました。

VBAでのLike演算子利用

では次は、VBAでLike演算子を利用する方法を見ていきましょう。
基本はクエリの場合と同じですが、VBAの場合は抽出条件を直接指定するのではなく、変数やコントロールを参照して指定することが多くなります。

例えば、以下の検索フォームで「顧客名検索」に入力した内容であいまい検索を行う場合を考えてみましょう。

フォームの抽出を行う場合は、filterプロパティを使って、Me.Filter = 条件文 の形で記述できます。
今回は以下のコードを記載しました。

Me.Filter = “顧客名 like ‘*” & Me!顧客名検索 & “*'”

ここでもLike演算子を使っています。
あいまい検索するためのキーワードは、フォームの「顧客名検索」コントロールへの入力値を参照するようにしています。

ここで注意したいのは、シングルクオーテーション(’)とダブルクォーテーション(”)の使い方です。
クエリで直接条件を指定した時はダブルクォーテーション(”)のみで文言を囲っていました。
しかし今回は少し複雑な記載になっています。

Filterプロパティの右辺(=より右側)は条件式を記載しています。
条件式はテキスト型なので、基本的にダブルクォーテーション(”)で囲ってテキストであることを示す必要があります。

そして、この条件式は3つのパーツから成り立っています。

“顧客名 like ‘*”

Me!顧客名検索

“*'”

上記の3つのパーツがアンド(&)でつながれているわけです。
それぞれのパーツが独立してテキスト型になっていることが分かると思います。

最初のパーツである「”顧客名 like ‘*”」の最初と最後のダブルクォーテーション(”)はこの範囲がテキストであることを示すためのものです。
ですので、実際に条件文として読むのは「顧客名 like ‘*」となります。

最後のパーツである「”*'”」も同様で、実際に条件文として読むのは、「*’」です。
そして、この間に「Me!顧客名検索」が入るわけです。

例えば、Me!顧客名検索に「たかはし」と入力されていた場合、実際の条件文は

顧客名 like ‘*たかはし*’

となります。

どうでしょう。
クエリで書いた時と同じですよね。

アスタリスク(*)の前後のシングルクオーテーション(’)は、この条件文におけるMe!顧客名検索の内容(こんかいは「たかはし」)をテキスト型として認識させるための記号なのです。
ダブルクォーテーション(”)で囲った中で更にてテキスト型を認識させるためには、シングルクオーテーション(’)を使用します。

私はこのLikeの書き方が最初の頃はなかなか覚えられなくて苦労しました。
皆さんはうまく使いこなしてください。

以上、Like演算子であいまい検索する方法をご紹介しました。


ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。

そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。

ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

サービス一覧

最後までお読みいただき、ありがとうございました。