Accessのフォーム上に表示されている全てのフィールドを対象に、Googleのような全文検索で、対象レコードを表示したいと思った事ありませんか?
フォーム上にある、1つのフィールドを検索する方法はたくさん紹介されていますが、複数のフィールドでGoogleのような検索で、該当するレコードを表示できる方法が紹介されていません。
でも~、簡単に出来る方法が分かりました!
テーブルかクエリを元に、フォームが作成されていることを前提に解説します。
是非、参考にしてください。
「AND検索」と「OR検索」について
検索の種類には、「AND検索」と「OR検索」があります。
・「AND検索」は、「すべてのキーワードを含む」レコードを表示
・「OR検索」は、「いずれかのキーワードを含む」レコードを表示
一般的な検索エンジンは、「AND検索」なので、その方法を解説します。
「OR検索」の方法は、コードを1か所変えるだけなので最後に解説しています。
完成形
最初に、完成形を示します。
下記のように、「ID」「販売日」「購入者名」「商品名」「売上金額」の5つのフィールがあるフォームがあります。
「検索窓」に、検索したい文字を全角スペース区切りで入力。
全てのフィールドを対象とした検索結果のレコードを表示します。

●検索窓に、「たなか シャツ」と入力して検索ボタンを押します。
「たなか」と「シャツ」が含まれているレコードが表示されます。

●検索窓に、「たなか」と入力して検索ボタンを押します。
「たなか」が含まれているレコードが表示されます。

●検索窓に、「ズボン」と入力して検索ボタンを押します。
「ズボン」が含まれているレコードが表示されます。

●検索窓に、「2025/0101 ズボン」と入力して検索ボタンを押します。
「2025/01/01」と「ズボン」が含まれているレコードが表示されます。

設定の手順
全文検索は以下の手順で作成します。
1.「検索ボタン」にVBAを設定する
2.「検索解除ボタン」にVBAを設定する
3. 検索方法をOR検索に変更する
「検索ボタン」にVBAを設定する
フォームを「デザインビュー」にします。
①「検索ボタン」をクリック

②プロパティシートの「イベント」を選択
③「クリック時」の▼から「イベントプロジャ」を選択
④すぐ右の「…」をクリック

⑤VBAの画面が表示されます。
下記がサンプルフォームのVBAコードです。

⑥下記のコードをコピペして完了!
●~●は、の各自の設定に合わせて変更してください。
(注1)●は入力しない
(注2)最初から表示されている、「Option Compare Database」は削除しない
Private Sub ●検索ボタン名●_Click()
Me.Refresh
If Not IsNull(Me!検索キーワード) Then
'キーワードでWHERE句を組み立ててフィルタ実行
Me.Filter = BuildWhere(Me!検索キーワード)
Me.FilterOn = True
Else
'フィルタを解除
Me.Filter = ""
Me.FilterOn = False
End If
End Sub
Private Function BuildWhere(ByVal strKeyWord As String) As String
Dim avarWords As Variant
Dim strCurWord As String
Dim strWhere As String
Dim iintLoop As Integer
'全角スペースの置換
strKeyWord = Replace(Trim$(strKeyWord), " ", " ")
avarWords = Split(strKeyWord, " ", , vbTextCompare)
'各キーワードのWHERE句の組み立て
For iintLoop = 0 To UBound(avarWords)
If Len(Trim$(avarWords(iintLoop))) > 0 Then
strCurWord = " LIKE ""*" & Trim$(avarWords(iintLoop)) & "*"""
strWhere = strWhere & IIf(Len(strWhere) > 0, " AND ", "") & "(" & _
"●ID●" & strCurWord & " OR " & _
"●販売日●" & strCurWord & " OR " & _
"●購入者名●" & strCurWord & " OR " & _
"●商品名●" & strCurWord & " OR " & _
"●売上金額●" & strCurWord & _
")"
End If
Next iintLoop
'返り値を設定
BuildWhere = strWhere
End Function
「検索解除ボタン」にVBAを設定する
「検索解除ボタン」をクリックすると、検索窓に入力したテキストを削除して全レコードが表示されます。
フォームを「デザインビュー」にします。
①「検索解除ボタン」をクリック

②プロパティシートの「イベント」を選択
③「クリック時」の▼から「イベントプロジャ」を選択
④すぐ右の「…」をクリック

⑤VBAの画面が表示されます。
下記のコードをコピペ。
●検索キーワード●は、
非連結フィールドのプロパティシートの、タブ「すべて」の、1番上の「名前」に置き換えてください。
Private Sub クリアボタン_Click()
Me!●検索キーワード● = ""
Form.FilterOn = False
End Sub


検索方法をOR検索に変更する
ここまでは、「AND検索」の方法でしたが、「OR検索」に変更する方法を解説します。
検索ボタンのVBAコードを、1か所変えるだけなので簡単です。
下記の赤丸の「AND」を「OR」に書き換えます。

置き換えたのがこちら。

これで、「OR検索」になります。
ここまで、AccessでGoogleのようなスペース区切りでの全文検索の方法を解説しました。
「メモな備忘録」は、私が役に立った事を忘れないように「メモ」しています。
この記事が、皆さんのお役に立てれば幸せです。
有り難うございました。