(Access)複数のテキストボックスの内容を条件に検索しフィルターをかけたい

Anonymous
2021-08-03T07:17:55+00:00

こんにちは。

Access超初心者です。

ここ数日なんども自分なりに調べたり勉強を試みたのですが、知識が圧倒的に足りず何を試してもエラーが発生し、どこを修正すればいいのかもわからず困っております。

どうか知恵を貸して頂けますと幸いです。

現在Access上フォームにこの様な画面を作成しております。(フォーム名仮称:検索画面)

設置してあるもの

・テーブルからデータを取得している表

・テキストボックス

・赤字は全てオブジェクトの名前

やりたいこと

・3つのテキストボックスに入力し「検索ボタン」を押すとその内容でフィルターがかかる(あいまい検索)

・一部空欄で検索される可能性もある

・該当するものがなければコメントを表示する(例文:記録がありません)

・「クリアボタン」をおすとフィルターが解除される

初歩の初歩的なところからわかっておらず、圧倒的な勉強不足で申し訳ございません。お勉強させて下さい。

Microsoft 365 と Office | Access | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません
質問作成者が受け入れた回答
Anonymous
2021-08-10T07:40:21+00:00

> 内容について上記の画像にまとめてみました。フォームのレイアウトについては> 添付頂いたものと同じようなものです。

ではまず、フォームヘッダーセクション上に配置されている
3 つのテキストボックス([住所名入力], [棟入力], [戸番入力])の
[コントロールソース]プロパティを全て空白にして下さい。
(連結テキストボックスではなく、非連結テキストボックスにする)

> 検索ボタンのプロパティ→イベント→クリック時のコード画面

[検索ボタン]および[クリアボタン]の[クリック時]イベントの発生時に
実行するイベントプロシージャを記述する場合は、例えば次のような
コードになるでしょう。

(フォーム[検索画面]のフォームモジュール)

Option Compare Database
Option Explicit

'コマンドボタン[検索ボタン]の[クリック時]イベント
Private Sub 検索ボタン_Click()

'フォームフィルターの設定処理を呼び出す  
Call subSetFilter  

End Sub

'コマンドボタン[クリアボタン]の[クリック時]イベント
Private Sub クリアボタン_Click()

'条件入力用の非連結テキストボックスの値を全て Null にする  
Me![住宅名入力] = Null  
Me![棟入力] = Null  
Me![戸番入力] = Null  
  
'フォームフィルターの設定処理を呼び出す  
Call subSetFilter  

End Sub

'フォームフィルターを設定するサブルーチン
Private Sub subSetFilter()

'フィルター条件式を生成するための変数の宣言  
Dim strFilter As String  
  
'テキストボックス[住宅名入力]の値が Null ではない場合  
If IsNull(Me![住宅名入力]) = False Then  
    'フィールド[住宅名]に対する条件を追加する  
    strFilter = strFilter & \_  
                " AND ([住宅名] Like '\*" & Replace(Me![住宅名入力], "'", "''", , , vbBinaryCompare) & "\*')"  
End If  
  
'テキストボックス[棟入力]の値が Null ではない場合  
If IsNull(Me![棟入力]) = False Then  
    'フィールド[住宅名]に対する条件を追加する  
    strFilter = strFilter & \_  
                " AND ([棟] Like '\*" & Replace(Me![棟入力], "'", "''", , , vbBinaryCompare) & "\*')"  
End If  
  
'テキストボックス[戸番入力]の値が Null ではない場合  
If IsNull(Me![戸番入力]) = False Then  
    'フィールド[住宅名]に対する条件を追加する  
    strFilter = strFilter & \_  
                " AND ([戸番] Like '\*" & Replace(Me![戸番入力], "'", "''", , , vbBinaryCompare) & "\*')"  
End If  
  
'先頭の" AND "を取り除く  
strFilter = Mid(strFilter, 6)  
  
'イミディエイトウィンドウに変数 strFilter の値を出力する(デバッグ用)  
Debug.Print strFilter  
  
'このフォームの[フィルター]プロパティの設定  
Me.Filter = strFilter  
  
'何らかの条件が指定されている場合(True)はフィルターを適用し、  
'何の条件も指定されていない場合(False)はフィルターを解除する  
Me.FilterOn = (strFilter <> "")  

End Sub


この回答は役に立ちましたか?

1 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません

3 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2021-08-12T00:45:56+00:00

    教わった通りやってみたら、思いどおりに動作を確認できました!

    とても助かりました!ありがとうございます!自分でもじっくり読み直して理解を深めてみようと思います!

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2021-08-10T05:55:35+00:00

    お尋ねしておきながら返信が遅れまして大変申し訳ございません。

    また、手描きのまとめで失礼致します。(見づらくてすみません)

    内容について上記の画像にまとめてみました。フォームのレイアウトについては添付頂いたものと同じようなものです。

    また、VBAについては当方で調べたものをいくつか試してみたのですが(検索ボタンのプロパティ→イベント→クリック時のコード画面、もしくはマクロビルダーで表示される画面)

    ExcelVBAはなんとなくでわかるのですが、AccessVBAやマクロの知識がなく、コード上の参照元の示し方やひとつひとつの組み合わせ方などがわかりません。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2021-08-03T09:07:38+00:00

    > 現在Access上フォームにこの様な画面を作成しております。(フォーム名仮称:検索画面)> ・テーブルからデータを取得している表

    ・そのテーブルの定義内容は具体的にどのようなものなのか。
     (テーブルの名前、各フィールドの名前/データ型、インデックス定義(おもに主キー)など)

    > ・テキストボックス> ・赤字は全てオブジェクトの名前

    ・それぞれのコントロールをどのセクションに配置しているのか。

    仮に[検索画面]が帳票フォームであるとするならば、恐らく
    次のようなレイアウトになっているのだろうと推察しますが。

    画像

    いずれにしても、基本的にはマクロか VBA を使用することになります。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません