ACCESS コンボボックスで選択された値を取得する方法
ACCESSのフォームにはコンボボックスを設定することが可能です。
コンボボックスは、あらかじめ決められた値をプルダウンから選択する方法です。
ここで選択された値を別の処理で利用したい場合は、VBAを使って値を取得することが可能です。
今回は、ACCESS VBAでコンボボックスで選択された値を取得する方法をご紹介します。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSの基本的な使い方をご紹介していきます。
目次
コンボボックスの値取得方法
コンボボックスで選択された値をVBAで取得するのは実は簡単です。
Me!コンボボックス名
これだけで開いているフォームのコンボボックスで選択された値を取得できます。
もう少し正しく記述すると
Me!コンボボックス名.Value
なのですが、最後のValueは省略することが可能です。
コンボボックスの値取得例
それでは実際に、コンボボックスの値を取得する例を見てみましょう。
以下のフォームを準備しました。
担当者と担当者IDという2つのコンボボックスが準備されており、その右側に「取得」ボタンを置いてあります。
取得ボタンを押すと以下のように、コンボボックスで選択した値がメッセージボックスで表示されます。
では、どのように作っているか、デザインビューで見てみましょう。
取得ボタンのクリック時イベントにイベントプロシージャを設定してあります。
イベントプロシージャの内容は下記の通りです。
Private Sub 担当値取得_ボタン_Click()
MsgBox Me!担当者名
End Sub
MsgBox関数を使って、Me!担当者コンボボックスの値を表示させています。
コンボボックスの値を取得する際の注意点
コンボボックスの値を取得する時には注意点があります。
それは、コンボボックスで表示されている値自体が、テキストボックスに格納されているとは限らないという点です。
先ほどのフォームで見てみましょう。
下段にある担当者IDの方の取得ボタンを押すと以下のように表示されます。
コンボボックスには「はこにわ」と表示されているのに、数字が表示されてしまっていますね。
取得ボタンに設定しているイベントプロシージャは以下の通りです。
Private Sub 担当ID値取得_ボタン_Click()
MsgBox Me!担当者ID
End Sub
コード的には前述した担当者の場合と同じです。
ではなぜ、担当者の場合は名前がでるのに、担当者IDだと数値になってしまうのでしょうか?
それは、コンボボックスの作成方法自体に違いがあるためです。
担当者コンボボックス、担当者IDコンボボックスともに、プルダウンに表示するデータの元となっているのは以下のMST_担当というテーブルです。
このテーブルの値をプルダウンに表示するために、それぞれのコンボボックスのプロパティシートでは以下のように設定されています。
担当者
担当者ID
どちらも値集合ソースは同じMST_担当テーブルですが、違いは連結列です。
担当者の方は連結列が2、つまりNST_担当テーブルの2つ目のフィールドである担当者名で連結させています。
一方、担当者IDの方は連結列が1、つまりNST_担当テーブルの1つ目のフィールドである担当者IDで連結されているのです。
この、連結列に指定したフィールドの値が、実際にコンボボックスに格納されます。
そのため、担当者コンボボックスには「はこにわ1」とテキストが入っているのに対して、担当者IDコンボボックスには数値の1が入っているのです。
ACCESSのコンボボックスは実際には後者のID指定で作成されいてるケースの方がほとんどでしょう。
こうしたコンボボックスの作成方法はこちらの記事で紹介していますので、興味があればご覧ください。
このようなケースでコンボボックスの値からテキストデータを抽出したい場合は、DLookUp関数を使って、コンボボックスに格納された主キーの値から必要なフィールドの値を抽出するか、Columnプロパティを使って、コンボボックスの値集合ソースの別のフィールドの値を取得するか、となります。
DLookUp関数を使ってコンボボックスの値を元に必要な値を取得する
まずはDLookUp関数を使って値を取得する方法をご紹介します。
その前に、先ほどのコンボボックスの設定を再度見てみましょう。
デザインビューでフォームを表示します。
担当者IDコンボボックスを選択して、右側のプロパティシートのデータタブを見てみます。
値集合ソースに「MST_担当」というテーブル名が指定されていることが分かります。
MST_担当テーブルの内容は以下の通りです。
次に、プロパティシートの書式タブを見てみましょう。
列数が2、列幅が0cm,3cmとなっています。
これは、値集合ソースであるMST_担当テーブルの最初から2フィールドをコンボボックスに利用し、さらにその列幅は1フィールド名の担当IDは0cm、つまり表示せず、2フィールド目の担当者名を3cmで表示していることが分かります。
つまり、コンボボックスに見えている値はMST_担当テーブルの2フィールド目にある担当者名なのです。
そのため、DLookUp関数で担当者名を取得できるようにVBAでプログラミングをしてみます。
Private Sub 担当ID値取得_ボタン_Click()
MsgBox DLookup("担当者名", "MST_担当", "担当者ID = " & Me!担当者ID)
End Sub
担当ID取得ボタンのクリック時イベントを上記の通り変更しました。
DLookUp関数を使って、MST_担当テーブルから、Me!担当者ID、つまり担当者IDコンボボックスの値を参照して担当者名を抽出しメッセージボックスに表示する、というものです。
実行すると以下のように、担当者名を表示することができました。
Columnプロパティを使ってコンボボックスの値を元に必要な値を取得する
もう一つの、Columnプロパティを使ってコンボボックスの値を元に必要な値を取得する方法をご紹介します。
Columnプロパティはコンボボックスやリストボックスの値集合ソースの特定の列の値を取得するものです。
上記の担当者ID取得ボタンの動作を、Columnプロパティを使って記述すると以下になります。
Private Sub 担当ID値取得_ボタン_Click()
MsgBox Me!担当者ID.Column(1)
End Sub
上記の例ではMe!担当者ID.Column(1)としていますので、Me!担当者IDコンボボックスの値集合ソースである「MST_担当」テーブルからフィールド1の値を返す、という処理になっています。
ここで、MST_担当のフィールドレイアウトを見てみてください。
1つ目のフィールドは担当者名ではなく、担当IDになっています。
では、実行してみましょう。
こちらも正しく担当者名を表示できました。
以上、コンボボックスで選択された値を取得する方法をご紹介しました。
ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。
最後までお読みいただき、ありがとうございました。