2列型コンボボックスで選択されたら2列目を表示してその値を取得するには?
Question 51.6 Previous Next
コントロール 3-3) の「選択されたら2列目を表示する」の応用で、2列目を表示するだけではなく、入力するにはどうしたらよいのでしょうか?
いろいろいじってみたんですが、上手くいきません。
要は、処理したいデータベースには、商品がコードでしか入力されていないので、A列に商品名、B列に商品コードを対応させたテーブルを作っておき、オペレータには、商品名をコンボボックスから選択するようなインターフェースにして、変数ComboBox1には商品コードの方が入る様にしたいのですが・・・
勿論、全く違う方法はいくつか思いつきますが、この例を生かせるとコーディングがすっきりし、他にも応用が利くので、使い方をマスターしたいと思っているのです。
Answer   Copyright (C) 2002.4.16 永井善王
回答に入る前に、Macro コントロールのページに掲載されている コンボボックス 3-3) 「選択されたら2列目を表示する」と題するマクロの内容を簡単に整理しておきます。

1. ユーザーフォームのInitialize(イニシャライズ)イベントマクロで、【第1図】の「名簿」シートのA列とB列の値をコンボボックスのリストにセットしておいてから、【第2図】のユーザーフォームを表示する。
 【第1図】名簿シート                【第2図】選択前のコンボボックス
名簿シート  コンボボックス

2. ユーザーによって選択されたらリストの 2列目を表示する
 【第3図】選択直後のコンボボックス
選択直後のコンボボックス

【第3図】は、ユーザーにより【第2図】のリストの中の「いけだ みつなり 池田三成」が選択されたので、その行の2列目の「池田三成」を表示している。

質問の内容を具現化してみますと、【第1図】のシートは【第4図】のように変わり、【第2図】のコンボボックスは【第5図】のように変わるかと思います。
 【第4図】テーブル              【第5図】選択前のコンボボックス
商品テーブル  コンボボックス

こうしておけば、ユーザーは商品名だけで選択できますし、データベース処理用にマクロで商品コードを取得することも可能になります。
【第4図】の「テーブル」シートの内容をコンボボックスに表示するためのマクロは、
コントロール 3-3) の「選択されたら2列目を表示する」のマクロと同様です。
Private Sub UserForm_Initialize()               'ユーザーフォームを初期化する
    ComboBox1.ColumnCount = 2                   'コンボボックスの列は2列にする
    For I = 0 To 7                              'Iが0から7まで(2行-2から9行-2まで)
        ComboBox1.AddItem Worksheets("テーブル").Cells(I + 2, 1).Value
                                                'テーブルシートのA列
        ComboBox1.List(I, 1) = Worksheets("テーブル").Cells(I + 2, 2).Value 'B列
    Next                                        '繰り返す
    ComboBox1.TextColumn = 2                    '選択されたら2列目を表示する
End Sub
そして、商品コードを取得するマクロとしては下記の方法が考えられます。
Private Sub ComboBox1_Change()
    商品コード = ComboBox1.Text                 'コンボボックスに表示された値を取得する
End Sub

サンプルブックのダウンロードは ここをクリック (YNxv9g037_ComboBox_Text.xls 50KB)
※ 一旦、ブックをハードディスクに保存し、後で改めて開いてから実行してください。

Excel VBA Macro