小規模老人保健施設の給食業務向けExcelVBA練習帳、給食帳票管理にVBAを活用、UserFormからセルを操作する5、コンボボックス

Excel VBA

コンボボックスを設置する

■ComboBoxをフォームにはりつける

■コンボボックスは幅を少し長めにセットしてください。

コンボボックスを使った動作の概要

■コンボボックスのリストに氏名データベースの情報をセットする

■コンボのリストから適当な氏名をクリックしたら、その氏名の人の登録番号をメッセージボックスを使って表示するだけです。

動作的には単純ですが実際はこの登録番号を使って様々なデータを引き出すことが考えられます。このフォームを使ってのシリーズでは特別な動作仕様は考えていません。コントロールの個別の使い方に留めていますのでご承知ください。

コンボボックスに値をセットするプロシージャ

Private Sub comboItemIn()
'コンボボックスのリストに氏名情報を追加する
'
'氏名データベース領域を取得
Dim max As Long
Dim r As Integer
With Sheet1
    'データベース領域の行数を取得
    max = .Range("A1").CurrentRegion.Rows.Count
    Me.ComboBox1.Clear
    For r = 2 To max
        '登録番号と氏名、よみ を一行の文字列に合成して登録
        Me.ComboBox1.AddItem .Cells(r, "A") & "■" & .Cells(r, "B") & "▲" & .Cells(r, "C")
    Next r
    Me.ComboBox1.ListRows = r
End With

End Sub

Sub comboItemIn()を呼び出す側

■フォームを開くときに諸設定コードを格納しているInitializeプロシージャから呼び出しています

下図一番下の赤枠部分です。

■もう一ヶ所、氏名を登録するコマンドボタンをクリックしたときにも、その新しく登録した氏名もリストに加える必要があるのでSub comboItemIn()を呼び出す必要があります。

下図一番下の赤枠部分です。

3個の氏名情報を結合して追加

赤マーカーのAddItemがコンボボックスに値を追加する命令です

黄マーカーの部分が3個の氏名情報を結合して追加される値です。

下図’が実際のコンボボックスのリストが開いた状態です。

■実際のプログラムコードです

コンボボックスのリストのどれかをクリックしたときの処理

■デザインモードでComboBox1をダブルクリックするとChangeイベントのサブプロシージャのブロックが挿入されますので、その中にメッセージボックスを表示するコードを書き込みます。

■Val関数の特徴。引数の文字列の先頭から1文字ずつ調べて数値に変換できなくなったら変換を止めます。以下にその例を書いています。

Val(123ですか)ーーーー> 123
Val(1■23ですか)ーーー> 1
Val(▲123ですか)ーーー> 0

■ComboBox1.List() は、コンボボックスのリストをテキストで表示する関数です。関数ですからカッコに引数を指定します。

引数にはComboBox1.ListIndexを指定します。
ListIndexはこの場合リストのどの行をクリックしたのかを示すプロパティーです。

X = Val( .List( .ListIndex  )  )

.List( .ListIndex  )・・・・> 1■23ですか” だった場合

X = Val( “1■23ですか”  )は 1を返すことになります。

X には1が入っています

つまり上図の場合はコンボボックスでリストをクリックしたときの氏名の属する行の登録番号をメッセージボックスに表示します。

下図はその様子を表します。

コンボボックスの解説はここまでにします

 

コメント

タイトルとURLをコピーしました