初心者向け解説シリーズ

Accessで爆速検索:LIKEや通じるワイルドカードの使いこなし方

nanikatoaccess

以下では、「Accessで爆速検索:LIKEや通じるワイルドカードの使いこなし方」をテーマに、Microsoft Accessでの部分一致検索や前方一致など、データ検索の基本技を解説します。AccessはデスクトップDBとして初心者にも比較的分かりやすい反面、Excel感覚で“フィルタ”のように使うだけではもったいない。ワイルドカードやLIKE演算子を上手に組み合わせれば、画面上の検索フォームやクエリで柔軟なフィルタリングが可能になります。ぜひ活用し、爆速かつ的確なデータ探索を実現してみてください。


1. LIKE演算子とワイルドカードの基本

ないものはない!お買い物なら楽天市場

1.1 LIKE演算子とは?

  • LIKE は文字列比較に使われるSQL演算子のひとつで、**「部分一致」や「パターンマッチ」**を実現
  • Accessの場合、ワイルドカード*?など、Excel/SQL Serverとは異なる点に注意(SQL Serverなどは %_ を用いる)

SELECT 顧客ID, 顧客名, 住所
FROM tbl_顧客
WHERE 住所 LIKE "*東京*";
  • 住所に「東京」という文字列が含まれるレコードを抽出
  • * が「0文字以上の任意文字列」を表す

1.2 ワイルドカードの種類

AccessのJet/ACEエンジンでは、主に以下のワイルドカードを使います。

ワイルドカード意味
*任意の文字列(0字以上)Like "山*" → 山で始まる
?任意の1文字Like "??田" → 2文字+田
#任意の1桁の数字(0-9)Like "###-"... とか
[abc]いずれか1文字 (abcのいずれか)Like "[AB]田*" → A田 or B田で始まる
[!abc]abc以外の1文字Like "[!A]*" → A以外で始まる

※注意:SQL Serverなど標準SQLのワイルドカード (%_) とは記号が異なります。


2. クエリデザインビューでの部分一致設定

Accessのクエリデザインビューでフィールドの「抽出条件」に以下のような文字列を入力するだけでOK。

  • 住所フィールド → Like "*東京*"
  • 名前フィールド → Like "*田中*"

実行すると、該当レコードだけが抽出されます。

AND/ORとの組み合わせ

  • "Like "*東京*" AND Like "*渋谷*" などで、住所に“東京”も“渋谷”も含む条件を表す
  • デザインビューなら行を分けてAND/ORを設定できる

3. 検索スピードを上げるためのポイント

  1. インデックスを活かす
    • 前方一致(Like "東京*")なら、インデックスがある程度活きる場合あり
    • Like "*東京*"のように前方が不定だと、最初から全部をスキャンするためパフォーマンスが落ちる
  2. 必要な範囲で条件を絞る
    • 住所を“東京都”だけでフィルタするなら、最初に「都道府県= ‘東京’」など別の列で狭めておく
  3. 前処理
    • 大量データを対象に*文字列*検索すると時間がかかる→フロントエンドでフォルダ分割や区分条件を加えるなど工夫
  4. SQL Server連携 + パススルークエリ
    • 大規模データを検索するなら、SQL Server側に置いてパススルークエリを使い、サーバーエンジンが最適化するほうが速い

4. フォームでのキーワード入力+動的フィルタ例

シナリオ: フォーム上のテキストボックス「txt検索」に「渋谷」と入力 → ボタンを押すと住所に「渋谷」を含むレコードが表示される

Private Sub btn検索_Click()
Dim strKeyword As String
strKeyword = Nz(Me.txt検索, "")

' クエリに動的条件を差し込む例(DAO)
Dim strSQL As String
strSQL = "SELECT 顧客ID, 顧客名, 住所 FROM tbl_顧客 " & _
"WHERE 住所 LIKE '*" & strKeyword & "*' " & _
"ORDER BY 顧客名;"

Me.RecordSource = strSQL ' フォームのレコードソースを上書き
End Sub

これにより、ユーザーが検索ワードを自由に入れ替え、住所に部分一致するレコードだけがフォームに表示されます。

  • 気軽に爆速検索UIが作れるメリットが大きい
  • 文字列のエスケープや大量行でのパフォーマンスには注意

5. 「通じる」ワイルドカード具体例を挙げる

  1. Like "*ヨシ*" → 「ヨシダ」「サンヨシ」「Kヨシ太郎」など含む全て
  2. Like "???田" → 先頭3文字 + “田” → 「山田」「森田」「小田」などになるが、4文字目がないとマッチしない
  3. Like "##-####-####" → 例: “03-1234-5678″(電話番号ぽいパターン)
  4. Like "[SM]田*" → S田○○ と M田○○ の両方を抽出
  5. Like "[!山]*" → 先頭が“山”以外の文字で始まる文字列

6. 応用:複数キーをAND/ORで結合

AND例

  • WHERE (住所 LIKE "*東京*") AND (顧客名 LIKE "*商事*")
    • “東京”が住所に含まれ、かつ“商事”を含む顧客名のみ

OR例

  • WHERE 住所 LIKE "*東京*" OR 住所 LIKE "*神奈川*"
    • 住所が東京か神奈川を含むものすべて

NOT例

  • WHERE 住所 NOT LIKE "*東京*"
    • 東京を含まない住所を表示

7. 注意点と運用のコツ

  1. 前方一致 vs 部分一致
    • Like "東京*" は前方一致するため、インデックスが一部有効になり検索が比較的速い
    • Like "*東京*" は前方が不定のためフルスキャンになりやすい→ データ量が多いと遅い可能性
  2. 大文字小文字
    • Accessは通常、文字列比較で大文字・小文字を区別しない(日本語では半角/全角なども注意)
  3. 複雑なパターン
    • 正規表現ではなくワイルドカードなので、細かなマッチ条件は不可能な場合も
    • 必要ならVBAで正規表現ライブラリを呼ぶアプローチを検討
  4. 数値列には効かない
    • Like “100” のように数値フィールドに適用するとエラー。数値に文字列パターン検索したいときは文字列変換が必要

8. まとめ:LIKEとワイルドカードで爆速&柔軟検索を実現

  1. 基本シンタックス
    • WHERE フィールド LIKE "[ワイルドカードパターン]"
    • *? をうまく使って前方一致や部分一致を表現
  2. パフォーマンス面
    • Like "○○*" は比較的高速
    • Like "*○○*" は全行スキャンになるためデータ量が大きいと遅い
  3. フォームのテキストボックス+動的SQL
    • ユーザーが自由にキーワードを入れられるUIを用意し、部分一致検索を簡単に
    • 爆速検索にするにはインデックス絞り込む工夫が重要
  4. 複数条件と結合
    • AND, OR, NOTと組み合わせ、より複雑な検索条件に対応
  5. ワイルドカード表記の違いに注意
    • Access(ACE/Jet)は * / ?, SQL Serverは % / _ など異なるルール

これらをマスターすれば、Accessが標準で備えるLIKE演算子を使って自在な文字列検索が行えます。住所検索、製品検索、顧客名検索など日常業務の検索速度が劇的に向上し、ユーザーの利便性もアップ。データ量が増えてきたら、前方一致を優先したりSQL Server連携(パススルークエリ)を検討し、爆速検索をさらに洗練させてみてください。


関連記事

一歩進んだ検索UIを自前で設計するときは、LIKEとワイルドカードが必須。慣れてきたら条件式を柔軟に組み立てて、あなたのAccessシステムで“爆速検索”を体感してみましょう。

DMM
ABOUT ME
まー
まー
駆け出しブロガー
入社した会社では、Accessを活用した基幹システムが長年運用されていました。しかし、開発者の高齢化により保守が困難となり、システムの維持・更新が急務に。 ほぼAccessに触れたことのなかった私は、ゼロから学びながら基幹システムを再構築してみることに。ついにはAccessによるシステム開発エンジニアとしてのスキルを身につけるまでに成長。 元々の業務のノウハウとそれを効率化するためのツール(Access)によって業務効率化システムをいくつも開発してきました。 みなさんの”なにか(業務のノウハウ)”とAccessで業務効率化を実現するお役に立てれば幸いです。 月30万の高配当投資も行っています。最新の銘柄情報もお届けしていきます。
googleアドセンス
記事URLをコピーしました