Accessでフォームを作成しユーザーにデータを入力してもらう場合に、少しでも入力の手間を減らす方法として、リスト表示された値を選択できるようにする方法があります。
コンボボックスを用いてこれを実現することなりますが、リストの選定方法として様々なパターンがありますので、今回はそれぞれの方法を紹介していきます。
フォームの作成
サンプルフォームとして図1に示すように「F_Combo」フォームを作成し、テキストボックスを1つ配置します。
追加したテキストボックスを右クリックし、「コントロールの種類の変更」→ 「コンボボックス」と選択します。これで、図2に示すようにテキストボックスがコンボボックスに切り替わります。
続いて、コンボボックスにリスト表示できるように設定をしていきます。
値リストを設定する方法
まずは、値リストを設定する方法を見ていきましょう。
コンボボックスのプロパティシートを開き、「値集合ソース」と「値集合タイプ」プロパティにそれぞれ次のように値を入力します。
値集合ソース: ”山田”; “佐藤”; “渡辺”; “鈴木”
値集合タイプ: 値リスト
これで設定が完了したため、フォームビュー画面に切り替えコンボボックスの矢印をクリックすることで図4のようにリストが表示されるようになりました。
テーブル/クエリを設定する方法
次に、テーブルやクエリをリストとして活用する方法を見ていきましょう。特に同じリストを複数の箇所で用いる場合、一つずつ値リストを設定することは煩雑となるため、多くの場合ではこちらの方法でリスト設定をする機会が多くなると思います。
まずは、サンプルテーブルとして「T_氏名」テーブルを作成し、「ID」、「姓」及び「名」フィールドを作成します。それぞれのフィールドのデータ型は「オートナンバー型」、「短いテキスト」及び「短いテキスト」とします。
サンプルデータは表1に示すように用意をします。
表1 サンプルデータ
ID | 姓 | 名 |
1 | 山田 | 五郎 |
2 | 佐藤 | 次郎 |
3 | 渡辺 | 花子 |
4 | 鈴木 | 敏夫 |
作成したテーブルをコンボボックスのリストに設定するため、プロパティシートを開き「値集合ソース」と「値集合タイプ」プロパティにそれぞれ次のように値を入力します。
値集合ソース: T_氏名
値集合タイプ: テーブル/クエリ
また、2列目にある「姓」フィールドのみをリスト表示させることとし、この場合「列数」と「列幅」プロパティにそれぞれ次のように値を入力します。
列数: 2
列幅: 0cm;3.801cm
これらのプロパティ設定では、列数が「2」となっていることから、「ID」と「姓」フィールドをリストに表示させ、かつ、1列目の列幅を「0cm」としていることから「ID」フィールドは表示されないようにしています。
このように設定した場合も、フォームビューで確認すると図4に示す結果と同様のリストが表示されます。
同様に、2列目と3列目にある「姓」と「名」フィールドをリスト表示させ場合、「列数」と「列幅」プロパティにそれぞれ次のように値を入力した場合はどのようになるかも確認しましょう。
列数: 3
列幅: 0cm;2cm;2cm
このようにして、テーブルやクエリを値集合ソースとして用いることができますが、これらの方法で値を選択した場合、見かけ上は「姓」フィールドの値が表示されますが、コンボボックスには「ID」フィールドの値が入力されることになります。つまり、例えば「山田」を選択した場合、実際にはコンボボックスに「1」が入力されることになります。この設定方法は、以下の記事でも紹介をしていますので、ご参考にしてください。
このため、直接「姓」フィールドの値を登録したい場合はどうすればいいでしょうか。用意した「T_氏名」テーブルは一つ目のフィールドが「ID」となっているため値集合ソースの1列目も「ID」フィールドとして認識されます。そこで、値集合ソースの1列目を「姓」フィールドとすればこれらの問題を解決することができます。
SQL文を設定する方法
ここで紹介する方法は、選択クエリを用いて「T_氏名」テーブルの内「姓」フィールドを射影することでも解決できますが、このためだけにクエリを作成することは後々のメンテナンス等を考えた場合に煩雑となりますので、値集合ソースに直接SQL文を入力することで解決する方法を示します。
コンボボックスの「値集合ソース」と「値集合タイプ」プロパティにそれぞれ次のように値を入力します。
値集合ソース: SELECT 姓 FROM T_氏名;
値集合タイプ: テーブル/クエリ
また、「列数」と「列幅」プロパティにそれぞれ次のように値を入力します。
列数: 1
列幅: 3.801cm
「値集合ソース」プロパティには選択クエリに相当するSQL文を記載していますが、ここで意味していることは「T_氏名」テーブルから「姓」フィールドのみを射影するということです。
つまり、1列目が「姓」フィールドとして認識されることとなるため、「列数」と「列幅」プロパティは1列分の設定としています。
この表示結果も図4と同じとなりますが、選択した値はそのまま「姓」フィールドの情報がコンボボックスに登録されることになります。
まとめ
今回は、入力の手間を減らすためコンボボックスを用いてリスト表示できるよう、値集合ソース等のプロパティ設定方法を紹介しました。
フォーム上の設定内容によってテーブルへ登録される値が変わることにも注意が必要ですが、一度方法を覚えてしまえば、将来的には入力の手間を大きく減らすことができ業務効率の改善も期待できますので、是非、フォーム作成の参考にしていただければと思います。
スポンサーリンク
コメント