こんにちは!フリーランスの長野です。
リストボックスって使っていますか?リストボックスとは、VBAのユーザーフォームで使えるパーツの一つで、いくつか登録したテキストの中から選択する場合に使用します。この記事では、リストボックスについて
- リストボックスとは
- リストボックスの呼び出し方
- リストボックスの初期化
- リストボックスから値を取得する方法
など基本的な内容から複数選択する方法やコリストボックスのメソッドとプロパティなど応用的な内容についても解説していきます。今回はコンボボックスについて、わかりやすく解説します!
リストボックスとは?
リストボックスとは、VBAのユーザーフォームで使えるパーツの一つで、いくつか登録したテキストの中から選択する場合に使用します。リストボックスの項目の中から、ひとつもしくは複数の項目を選択します。
リストボックスの呼び出し方
リストボックスはツールボックスから選択して、フォームにドラッグ&ドロップします。
なお、ユーザーフォームの呼び出し方、使い方などは、こちらで詳しく解説していますので、ぜひ参考にしてください。
リストボックスの初期化
リストボックスに項目を登録する方法についてみていきましょう。
AddItemで追加する方法
リストボックスにテキストを追加するには、AddItemメソッドを使います。AddItemメソッドは以下のように記述します。
AddItem(Item, [Index])
「[ ]」内は省略することができます。引数Itemは、追加するテキストを指定します。引数Indexは、追加する項目の位置を指定します。省略された場合は、リストの末尾に追加されます。
起動時に初期化する方法
あらかじめフォームが起動する際に、テキストを登録しておくことができます。以下のように記述します。
Private Sub UserForm_Initialize() With ListBox1 .AddItem "北海道" .AddItem "青森" .AddItem "岩手" End With End Sub
SubプロシージャUserForm_Initialize()でフォーム起動時の処理を定義します。
リストボックスから値を取得する方法
リストボックスの中から何が選ばれたか取得するにはValueプロパティを使用します。例として、リストボックスから選択した値をコマンドボタンを押すとExcelのシート上に表示されるようにしてみましょう。
Private Sub CommandButton1_Click() Range("A1").Value = ListBox1.Value End Sub
SubプロシージャCommandButton1_Click()は、コマンドボタンをダブルクリックすると自動で生成されます。選択したテキストを取得するために、Valueプロパティを使用しています。
複数選択する方法
これまではリストボックスの項目の中から1つの項目を選択し、その値を取得する方法についてみてきました。
でも、選択する項目は1つとは限らないですよね。複数の項目を選択して、その値を取得する方法についてみていきましょう。
MultiSelectプロパティで設定
複数の項目を選択できるようにするには、MultiSelectプロパティで指定します。MultiSelectプロパティは以下の定数を指定することができます。
定数 | 値 | 説明 |
---|---|---|
fmMultiSelectSingle | 0 | 1つだけ選択(既定値) |
fmMultiSelectMult | 1 | 複数選択が可能 選択/選択解除は[Space]キーを押すか、またはクリック |
fmMultiSelectExtended | 2 | 複数選択が可能 [Shift]キーを押しながらクリックするか、または[Shift]キーを押しながら方向キーを押すと、連続的に選択 項目の選択/選択解除を個別に行うには、[Ctrl]キーを押しながらクリック |
それでは、サンプルコードで確認しましょう。
Private Sub UserForm_Initialize() With ListBox1 .AddItem "北海道" .AddItem "青森" .AddItem "岩手" .MultiSelect = fmMultiSelectMulti End With End Sub
Subプロシージャ「UserForm_Initialize()」でフォーム起動時の処理を定義するときに、MultiSelectプロパティをfmMultiSelectMultiで指定します。
複数の値を取得する方法
それでは複数選択した場合の値を取得する方法についてみていきましょう。複数選択した場合の値を取得するメソッドやプロパティは用意されていませんので、工夫して作る必要があります。Selectedプロパティで1項目ずつ順に選択されているか確認することになります。
Selectedプロパティは以下のように記述します。
Selected(Index)
Selectedプロパティは引数にリストのインデックス番号を指定し、ブール型の値を返します。サンプルコードで確認しましょう。
Private Sub CommandButton1_Click() Dim i As Integer, j As Integer j = 1 With ListBox1 For i = 0 To ListBox1.ListCount - 1 If ListBox1.Selected(i) Then Cells(j, 1).Value = ListBox1.List(i) j = j + 1 ListBox1.Selected(i) = False End If Next i End With End Sub
このサンプルコードでは、Selectedプロパティを使って1つずつ選択されているか確認をしています。Selectedプロパティの値がTrueの場合、Listメソッドを使ってインデックス番号に該当する項目をExcelシート上に表示するようにしています。
これをListCountプロパティを使ってリストの項目数全てで同じ処理を繰り返し行っています。
リストボックスのメソッド、プロパティ
コンボボックスのメソッドとプロパティについてみていきましょう。
メソッド一覧
メソッドについては以下のとおりです。
メソッド | 説明 |
---|---|
AddItem [Item][, Index] | リストに項目を追加します。 引数Itemで追加する文字列を指定します。省略すると空白行が追加されます。 引数Indexで追加する位置を指定します。省略すると末尾に追加されます。 |
Clear | リストに追加された全ての項目を削除します。 |
RemoveItem Index | リストの項目を1つ削除します。 引数Indexで項目の位置を指定します。 |
プロパティ一覧
主なプロパティについては以下のとおりです。
プロパティ | 定数(値) | 説明 |
---|---|---|
RowSource | ー | Excelシートのセルに入力された項目をリストに追加 |
ListCount | ー | リストの項目数 |
ListIndex | ー | 選択されている項目のインデックス番号を取得 |
Selected | ー | 複数選択される可能性がある場合に、選択されている場合はTrue、選択されていない場合はFalse |
MultiSelect | (上記参照) | 複数選択かどうかの指定 |
ListStyles | fmListStylePlain(0) | 標準のリストボックスを表示(既定値) |
fmListStyleOption(1) | 各項目の先頭にオプションボタンまたはチェックボックスを表示 |
Clearメソッドで削除
それではClearメソッドを使って、リストを全て削除する方法についてみていきましょう。
Private Sub CommandButton1_Click() With ListBox1 .Clear End With End Sub
コマンドボタンを押すとリストボックスのリストが全て削除されるように記述しています。
まとめ
ここでは、リストボックスの使い方について説明しました。Excelのシート入力だけでは入力フォームとして不足と感じる場合は、ユーザーフォームで使いやすい入力フォームを作れるようになると作業時間や入力ミスの削減になります。
リストボックスも使いこなすことができるように、この記事を何度も参考にして下さいね!