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

以下では、「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. 検索スピードを上げるためのポイント
- インデックスを活かす
- 前方一致(
Like "東京*"
)なら、インデックスがある程度活きる場合あり Like "*東京*"
のように前方が不定だと、最初から全部をスキャンするためパフォーマンスが落ちる
- 前方一致(
- 必要な範囲で条件を絞る
- 住所を“東京都”だけでフィルタするなら、最初に「都道府県= ‘東京’」など別の列で狭めておく
- 前処理
- 大量データを対象に
*文字列*
検索すると時間がかかる→フロントエンドでフォルダ分割や区分条件を加えるなど工夫
- 大量データを対象に
- 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. 「通じる」ワイルドカード具体例を挙げる
Like "*ヨシ*"
→ 「ヨシダ」「サンヨシ」「Kヨシ太郎」など含む全てLike "???田"
→ 先頭3文字 + “田” → 「山田」「森田」「小田」などになるが、4文字目がないとマッチしないLike "##-####-####"
→ 例: “03-1234-5678″(電話番号ぽいパターン)Like "[SM]田*"
→ S田○○ と M田○○ の両方を抽出Like "[!山]*"
→ 先頭が“山”以外の文字で始まる文字列
6. 応用:複数キーをAND/ORで結合
AND例
WHERE (住所 LIKE "*東京*") AND (顧客名 LIKE "*商事*")
- “東京”が住所に含まれ、かつ“商事”を含む顧客名のみ
OR例
WHERE 住所 LIKE "*東京*" OR 住所 LIKE "*神奈川*"
- 住所が東京か神奈川を含むものすべて
NOT例
WHERE 住所 NOT LIKE "*東京*"
- 東京を含まない住所を表示
7. 注意点と運用のコツ
- 前方一致 vs 部分一致
Like "東京*"
は前方一致するため、インデックスが一部有効になり検索が比較的速いLike "*東京*"
は前方が不定のためフルスキャンになりやすい→ データ量が多いと遅い可能性
- 大文字小文字
- Accessは通常、文字列比較で大文字・小文字を区別しない(日本語では半角/全角なども注意)
- 複雑なパターン
- 正規表現ではなくワイルドカードなので、細かなマッチ条件は不可能な場合も
- 必要ならVBAで正規表現ライブラリを呼ぶアプローチを検討
- 数値列には効かない
- Like “100” のように数値フィールドに適用するとエラー。数値に文字列パターン検索したいときは文字列変換が必要
8. まとめ:LIKEとワイルドカードで爆速&柔軟検索を実現
- 基本シンタックス
WHERE フィールド LIKE "[ワイルドカードパターン]"
*
や?
をうまく使って前方一致や部分一致を表現
- パフォーマンス面
Like "○○*"
は比較的高速Like "*○○*"
は全行スキャンになるためデータ量が大きいと遅い
- フォームのテキストボックス+動的SQL
- ユーザーが自由にキーワードを入れられるUIを用意し、部分一致検索を簡単に
- 爆速検索にするにはインデックスや絞り込む工夫が重要
- 複数条件と結合
- AND, OR, NOTと組み合わせ、より複雑な検索条件に対応
- ワイルドカード表記の違いに注意
- Access(ACE/Jet)は
*
/?
, SQL Serverは%
/_
など異なるルール
- Access(ACE/Jet)は
これらをマスターすれば、Accessが標準で備えるLIKE演算子を使って自在な文字列検索が行えます。住所検索、製品検索、顧客名検索など日常業務の検索速度が劇的に向上し、ユーザーの利便性もアップ。データ量が増えてきたら、前方一致を優先したりSQL Server連携(パススルークエリ)を検討し、爆速検索をさらに洗練させてみてください。
関連記事
一歩進んだ検索UIを自前で設計するときは、LIKEとワイルドカードが必須。慣れてきたら条件式を柔軟に組み立てて、あなたのAccessシステムで“爆速検索”を体感してみましょう。