フォームとコントロールの活用−複数列コンボボックスの活用

(コンボボックスの複数列表示)

例えば販売管理システムにおいて売上データを入力する際、基本データとして必ず
得意先コードがあり、得意先名もまた、データとして格納するか否かを問わず、
入力されたコードに合致するものを確認のために画面表示させるでしょう。

このようなケースでコンボボックスを使う場合、ユーザが覚えていない得意先については
コンボボックスに表示されるリストからコードを選択できるようにします。
また、プルダウンされたリストにはコードだけでなく、得意先名も同時に表示させると、
ユーザーにとって目的の得意先を指定するのがより簡単になります。

さらに、選択された値に応じて複数列表示させたコンボボックスのリストから得意先名を
取得する方法も合わせて検討してみましょう。

(サンプル)
前提:ワークシート(シート名:得意先マスター)、
   ユーザフォーム、コンボボックス(cboCD)、テキストボックス(txtName)

'===============ユーザフォーム初期化イベント===============================

Private Sub UserForm_Initialize()

    Dim LastRow As Long '得意先マスター2列目の最終行を取得
    LastRow = Sheets("得意先マスター").Range("B65536").End(xlUp).Row

    With Me.cboCD
        .ColumnCount = 2
        'コンボボックスのリストに得意先マスターシート上のデータを指定
        '指定形式は・・・ex)ComboBox1.RowSource = "Sheet1!A1:D5"
        .RowSource = "得意先マスター!" _
                           & Range("A2", "B" & LastRow).Address
        'ドロップダウンリストの幅を指定
        .ListWidth = 450
        '2列指定したリストの幅をそれぞれ指定(セミコロンで区切って文字列指定)
        .ColumnWidths = "100;350"
    End With
    
    '得意先名は直接入力しないのでロック。タブ移動によるフォーカス取得も行わない
    Me.txtName.Locked = True
    Me.txtName.TabStop = False

End Sub


'===================コンボボックス値変化時のイベント========================

Private Sub cboCD_Change()

    With Me.cboCD
    '入力値(あるいは選択値)がリストになければ入力値をクリア

        If .MatchFound = False Then
            .Value = ""
            Me.txtName.Text = ""
            .SetFocus
        Else
       '入力値がリストに含まれている場合、リスト2列目の得意先名を
       '取得してテキストボックスに表示。Listプロパティーの列インデックスが
       '1であることに注意  : List、ListIndexの各ヘルプを参照
       
            Me.txtName = .List(.ListIndex, 1)
        End If

    End With

End Sub
'===============コンボボックスからフォーカスを移動するとき=================

Private Sub cboCD_Exit(ByVal Cancel As MSForms.ReturnBoolean)

    'コンボボックスに得意先コード未入力の場合は移動させない
    If cboCD.Value = "" Then Cancel = True
    
End Sub


Excel97,2000



戻る


Excel Word Access VBA! モーグ