おさらい
前回からユーザーを意識したユーザーフォームの作成に取り掛かろうかという事でしたね。
そこで今回はユーザーフォームのパーツ「ComboBox」と「ListBox」についてお勉強していきましょう。という事でしたね。
- ComboBox…Excel上でリストを使用した時の様な動作が可能です。アイテム(中に入れる値)を追加する事が可能で右側の▼を押すとリストを展開させる事が出来ます。
- ListBox…コンボボックス()がもう少し広めに展開しているようなイメージです。コマンドボタンの様にアイテムを追加する事が出来ます。
それぞれの特徴はこんな感じでしたね。
ComboBoxやListBoxの使用方法
こちらはExcelで言う所のリストにあたるものなので中にリストの元になる値が存在しなければそもそも存在する意味がありません。
リストの元になる値の事を「Item(アイテム)」と言い、ComboBoxやListBoxにItemを追加する時は「AddItem」というメソッドを使用します。
AddItemを使用する際の文法
AddItemに続いて半角スペースを空け、半角スペースに続き追加したいItemを記述、とこのような記述をします。この場合のオブジェクトとは「ComboBox」や「ListBox」の事ですね。
今までの感覚から行くとAddItem = ○○とかやりたくなってしまいますが、その記述だと構文エラーになってしまいます。
例えば下図の様なセルがあるとします。
このA1セルからA10セルまでの値をComboBoxにAddItemしていきましょう。このリスト内容がユーザーフォームが立ち上がった時にComboBoxのItemとして登録されているように「UserForm_Initialize」に記述していきましょう。
この場合はFor~Nextを使用すれば3行でComboBoxにItemを追加する事が出来ます。
Private Sub UserForm_Initialize() Dim i As Long For i = 1 To 10 Me.ComboBox1.AddItem Cells(i, 1).Value Next End Sub
こうですね。
しかしこれではリストの数が増えた時に対応出来ないので最低限こういった書き方をしておいた方がいいでしょう。
Private Sub UserForm_Initialize() Dim i As Long For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row Me.ComboBox1.AddItem Cells(i, 1).Value Next End Sub
これでComboBoxへItemを追加する事が出来ました。ListBoxへのItemの追加方法も同様です。プログラム中の「ComboBox」を「ListBox」に書き換えればItemを追加出来ます。
ComboBoxやListBoxのValue
ComboBoxやListBoxは選択されている項目がValue(値)となります。
例えばList1という項目が選択されていたとすると
となります。
逆に何も選択されていない場合は空文字となってしまいます。空文字を入力されたくない場合やデフォルトで何かしらの値を入れておきたい場合はこの様に記述しましょう。
Private Sub UserForm_Initialize() Dim i As Long For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row Me.ComboBox1.AddItem Cells(i, 1).Value Next Me.ComboBox1.Value = cells(1, 1).Value End Sub
この様にUserForm_Initializeの際にComboBoxやListBoxのValueとして値を入れ込めば初期状態はその値を選択した状態でユーザーフォームが立ち上がります。
ユーザーフォームを立ち上げてみましょう
ここまで記述出来たらユーザーフォームを立ち上げてみましょう。
右側の▼ボタンで無事にList1~10までが展開されましたね。
では、次回は順不同のItemをListBoxに追加してそのItemを検索する機能を付けていきたいと思います。