#135 コンボボックスの表示順に学習機能を持たせる方法 フォーム、VBA

コンボボックスに表示される項目の順番は、通常は、テーブルのキー順やクエリーで指定された並び順に固定されています。ここでは、選択頻度の多い順、つまりコンボボックスで選択された回数の多い順に項目を表示する方法をご紹介します。コンボボックスで項目を選択するたびにその表示順が変わる、いわゆる"学習機能"を持たせることができます。

次のような手順で、各テーブルやフォームを設定します。

  1. tbl所属マスタのテーブルデザインコンボボックスのレコードソースとなるテーブルに、選択された回数を保存するフィールド(ここでは"参照回数")を作成します。データ型は「数値」にします。ここでは"tbl所属マスタ"というテーブルをレコードソースとしています。

  2. フォームにコンボボックスを配置します。ここではその名前を"所属ID"としました。
    社員マスタのフォームデザイン

  3. コンボボックスの「値集合ソース」プロパティを次のようにします。このSQLステートメントでは、「参照回数」フィールドの並び順が"降順"になるようにします。これによって表示順が参照回数の多い順に設定されます。なお、これと同じ内容のクエリーを作成し、それを値集合ソースにしてもかまいません。
    値集合ソースのSQLステートメント

  4. コンボボックスのその他のプロパティを、必要に合わせて設定します。

  5. コンボボックスの「更新後処理」イベントプロシージャを次のようにします。
    Private Sub 所属ID_AfterUpdate()
      Dim dbs As Database

      Set dbs = CurrentDb
      dbs.Execute "UPDATE tbl所属マスタ SET 参照回数 = 参照回数 + 1 " & _
                  "WHERE 所属ID = " & Me!所属ID
      Me!所属ID.Requery

    End Sub
    ここでは、更新クエリーをVBAからExecuteメソッドを使って発行しています。コンボボックスで選択された項目(Me!所属IDの値)と同じ「所属ID」を持つtbl所属マスタ上のレコードの、参照回数フィールドの値をインクリメントしています。そして、その結果が画面表示に反映されるよう、最後にコンボボックスの再クエリー(Requeryメソッド)を実行します。

実際にフォームを実行すると、次のようになります。
  • はじめてコンボボックスを使うときはじめて実行したときは、参照回数はすべてゼロなので、所属ID順に表示されます。
  • 「営業二課」を選択「営業二課」を選択しました。
  • 2回目のコンボボックス使用時再度コンボボックスをドロップダウンさせると、「営業二課」が先頭に表示されるようになります。これ以降、項目を選択するたびに、選択された回数に応じて表示順序が変わります。
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved