ExcelとAccessのスキルアップをサポートするサイトです

ExcelとAccessの学習室

【Access VBA】テキストボックスとオプションボタンを使ってデータ検索

Accessにおいて、データの検索機能を実装する際には、コンボボックスを使う方法が一般的にわかりやすい手段としてよく用いられます。
コンボボックスを使った検索方法については、当ブログの別記事でも解説しています。

https://sys-daddy.com/access-vba-combo-box-data-search/

しかし、他にもさまざまな検索方法があるので、場面によってうまく使い分けることでらくにデータを操作できます。
本記事では、テキストボックスとオプションボタンを活用した、データを効率的に検索する方法について詳しく解説します。

コンボボックスを使った方法は、リストされた値を選ぶだけで直感的に実装・操作しやすいですが、その他のコントロールを使ったものはなかなかイメージつかないのではないでしょうか?

オプションボタンとテキストボックスを組み合わせること自体、ちょっと複雑な印象をもってしまうかもしれませんが、本記事で紹介するコードはとてもシンプルです
ある程度AccessVBAのスキルを持つ方であれば、スムーズに実装できるでしょう。

今回もサンプルデータベースを準備しておりますので、よかったらご活用ください。

≫ Filter_Example_Option.accdb

完成品の動作

サンプルデータベースのフォーム「F01部品マスタM」を開きます。

フォームにはオプションボタンとテキストボックスが配置されています。

オプションボタン分類の種類を選び、テキストボックスキーワードを入力します。
本記事では、中分類を選んで「チェーン」を入力しました。


ここではあいまい検索できるようにしているので、分類名が完全に一致していなくても大丈夫です。
つまり、分類名の正確な名称を覚えていなくても検索可能だということです。

検索ボタンをクリックすると、中分類の検索ワードに合致したデータだけが表示されます。

さらに、検索クリアボタンをクリックすることで初期状態に戻ります

フォーム起動後に作動するコード

フォーム起動直後に作動するコードでは以下のとおりです。

Private Sub Form_Load()

    Me.RecordSelectors = False ' レコードセレクタを非表示にする
    Me.NavigationButtons = False ' 移動ボタンを非表示にする

    'オプションボタン・テキストボックス・サブフォームを初期化
    Me.分類選択.Value = 1
    Me.検索ワード.Value = Null
    Me.F01部品マスタDS.Form.RecordSource = "SELECT * FROM Q01部品マスタ表示用;"

End Sub

上のコードは、以下の処理を実行します。

  • レコードセレクタなどの非表示で見た目をよくする
  • オプションボタン、テキストボックス、サブフォームのリセット

小分類・中分類・大分類の各オプションボタンはオプショングループにまとめられていて、フォーム起動時は小分類が選択されるよう制御しています。

小分類を選択する場合、オプショングループ「分類選択」を1にします。
オプションボタンの値が分からない場合は、プロパティのオプション値を確認しましょう。

検索ボタンクリック時に作動するコード

以下が検索ボタンをクリックしたときに作動するコードです。

Private Sub 検索_Click()
    
    'ここからプログラムが起動(対象品なしの場合はレコード件数ゼロ)
    If IsNull(Me.検索ワード.Value) = True Then
        Me.F01部品マスタDS.Form.RecordSource = "SELECT * FROM Q01部品マスタ表示用;"
    ElseIf Me.分類選択.Value = 1 Then
        Me.F01部品マスタDS.Form.RecordSource = "SELECT * FROM Q01部品マスタ表示用 WHERE 小分類名 like '*" & Me.検索ワード.Value & "*';"
    ElseIf Me.分類選択.Value = 2 Then
        Me.F01部品マスタDS.Form.RecordSource = "SELECT * FROM Q01部品マスタ表示用 WHERE 中分類名 like '*" & Me.検索ワード.Value & "*';"
    ElseIf Me.分類選択.Value = 3 Then
        Me.F01部品マスタDS.Form.RecordSource = "SELECT * FROM Q01部品マスタ表示用 WHERE 大分類名 like '*" & Me.検索ワード.Value & "*';"
    End If

End Sub

オプションボタンで選んだ分類ごとに検索できるよう、処理を分岐させています。
また、SQL文はあいまい検索の「Like」と「*(アスタリスク)」を使用しています。

今回はたまたまコントロール同士の相性が良かったのでシンプルなコードに仕上がりましたが、相性が悪いコントロールを組み合わせるとメンテしにくいコードに仕上がってしまいますので、十分な見極めが必要です。

検索クリアボタンクリック時に作動するコード

検索クリアボタンで作動するコードも忘れずに作っておきましょう。

Private Sub 検索クリア_Click()
    
    'オプションボタン・テキストボックス・サブフォームを初期化
    Me.分類選択.Value = 1
    Me.検索ワード.Value = Null
    Me.F01部品マスタDS.Form.RecordSource = "SELECT * FROM Q01部品マスタ表示用;"

End Sub

まとめ

今回は、AccessVBAプログラミングで、オプションボタンとテキストボックスを組み合わせてデータを検索する方法を解説しました。

データを絞り込むのはコンボボックスがメジャーな方法ですが、デメリットもあります。
コンボボックスを使った検索は完全一致が原則で、選択リスト数も多くなりがちです。
また、コンボボックス内の選択肢(リスト)が増えすぎると、ムダに探す手間が増えて操作性が下がります。

一方、オプションボタンやテキストボックスを活用し、あいまい検索で絞り込む方法も場面によっては有効です。
あいまい検索は完全にキーワードが合致していなくても検索できるので、ユーザーの慣れ次第ではかなり操作性が上がります。
工夫次第でコードのボリュームを抑えて、メンテしやすいプログラムを作れます。

とはいえ、コントロールの使い分けは、場面による見極めが必要なので、あとは経験を積み上げていくだけですね。