■ ListBoxコントロールについて詳しく知ろう
前回に引き続き、ExcelエクセルにおけるUserFormユーザーフォームの解説です。
今回は、ListBoxコントロールオブジェクトの解説です。
ListBoxコントロール(リストボックスコントロール)オブジェクト
選択肢の一覧を表示し、その中から 1 つまたは複数の項目を選択できます。
既定のプロパティ:Valueプロパティ
既定のイベント:Clickイベント
■ ListBoxコントロールオブジェクトのプロパティ
・BackColor:コントロールの背景色を設定します。背景色はRGB関数、整数、定数で指定することが可能です。コントロールの背景スタイルがFmBackStyleOpaqueになっている必要があります。
・BoderColor:コントロールの境界線色を設定します。コントロールの境界線スタイルがfmBorderStyleSingleになっている必要があります。
・BoderStyle:コントロールの境界線スタイルを設定します。0 - fmBorderStyleNoneで境界線を表示しません。1 - fmBorderStyleSingleで境界線を表示します。既定値は0です。
・CanPaste:クリップボードにあるデータがコントロールに貼り付け可能かどうかを返します。Trueなら貼り付け可能で、Falseなら貼り付け不可です。値の取得のみ可能です。
・List、Column:ListBoxコントロール内に複数の項目を設定します。
ListプロパティとColumnプロパティは、共にリスト形式(2次元配列)のデータをコントロールに設定します。値の取得も可能です。ListとColumnは、相対するプロパティで行、列の指定が逆になります。Listプロパティは(行,列)の順に、Columnプロパティは(列,行)の順に設定します。
・ColumnCount:ListBoxコントロールに表示する列の数を設定します。
・ColumnWidths:複数列のあるListBoxで各列の幅をポイント単位、または単位を指定して設定します。
・ListCount:ListBoxコントロールにあるリストの数(行数)を返します。
・ListIndex:ListBoxコントロールで、現在選択されている行のインデックスを返します。開始値は0です。
(例)
Private Sub UserForm_Initialize()
Dim MyVar1 As Variant
Dim MyVar2 As Variant
MyVar1 = Range("A1:B5")
MyVar2 = Range("A1:E2")
With ListBox1
.ColumnCount = 2
.ColumnWidths = "50;50"
.List() = MyVar1
End With
With ListBox2
.ColumnCount = 2
.ColumnWidths = "50;50"
.Column() = MyVar2
End With
End Sub
この例では、ワークシートのセル範囲"A1:B5"のリストをListBox1に、"A1:E2"のリストをListBox2にそれぞれ設定します。ListBox1の場合、Listプロパティによって、"A1:B5"のセルに入力されている値が、そのままコントロール上に反映されます。ListBox2の場合は、Columnプロパティによって、"A1:E2"のセルに入力されている値が、行列を入れ替えてコントロール上に反映されます。Variant変数に代入されたセルのデータは1を開始値とした二次元配列になっていますが、コントロールのプロパティでは0を開始値とした二次元配列になっています。List、Columnプロパティで値を取得する場合は、インデックスの指定に注意する必要があります。 |
(例)
TextBox1 = ListBox1.List(2, 1)
TextBox2 = ListBox2.Column(1, 2)
先ほどの例を用いた場合、TextBox1には"B3"セルの値が、TextBox2には"C2"セルの値がそれぞれ設定されます。 |
・RowSource:ListBoxコントロールのソースを設定します。
・ControlSource:コントロールのValueプロパティに格納するデータを設定します。またValueプロパティにリンクさせるワークシートのセル範囲を指定します。
・ColumnHeads:ListBoxコントロールで列の見出しを表示するかどうかを設定します。
・BoundColumn:複数列があるListBoxコントロールで選択されている行のどの列をコントロールの値として格納するかを設定します。0でListIndexプロパティの値をコントロールに割り当てます。1(既定値)以上で指定した列の値をコントロールに割り当てます。開始値は1です。
・TextColumn:ユーザーが行を選択したときにTextプロパティに格納する列を設定します。開始値は1です。
・TopIndex:リストの先頭に表示される項目を設定します。値の取得も可能です。既定値はリストの1番目の項目です。
(例)
Private Sub UserForm_Initialize()
With ListBox1
.ColumnCount = 2
.BoundColumn = 2
.RowSource = "A2:B5"
.ControlSource = "C1"
.ColumnHeads = True
End With
End Sub
この例では、ワークシートのセル範囲"A2:B5"のリストをセル範囲"A1:B1"を列見出しにしてListBox1に設定します。ListBox1のValueプロパティはセル"C1"と連動しています。ListBox1のリストから選択し次のコントロールにフォーカスを移したとき、選択した行の2列目の値が、セル"C1"に出力されます。 |
・MultiSelect:複数選択を許可するかどうかを設定します。
0-fmMultiSelectSingle |
項目は 1 つだけ選択できます (既定値)。 |
1-fmMultiSelectMult |
複数選択を許可します。 |
2-fmMultiSelectExtended |
複数選択を許可します。Shiftキーを押しながらクリックするか、または Shift キーを押しながら方向キーを押すと、現在選択されている項目を始点として一連の項目を連続的に選択できます。項目の選択/選択解除を個別に行うには、Ctrl キーを押しながらクリックします。 |
・Selected:ListBoxコントロールにおける選択状況を設定します。値の取得も可能です。Selectedプロパティは、複数選択を許可しているときに使用します。このプロパティを使うと、どの行が選択されているかを調べることができます。また行の選択/選択解除をコードを通じて操作するときにもこのプロパティを使用します。
・ListStyle:ListBoxコントロールの表示スタイルを設定します。
0-fmListStylePlain |
通常のスタイルのリスト ボックスを表示します。 |
1-fmListStyleOption |
複数選択ができるオプションボタンまたはチェックボックスを表示します (既定値)。いずれかの項目を選択すると、その項目のオプションボタンが選択され、その他の項目のオプションボタンは選択がすべて解除されます。 |
※ MultiSelectプロパティにfmMultiSelectSingleが設定されている場合、1 つのボタンしか選択できません。複数選択が許可されている場合は、複数のボタンを選択できます。
(例)
Private Sub UserForm_Initialize()
With ListBox1
.ColumnCount = 2
.BoundColumn = 2
.RowSource = "A1:B5"
.MultiSelect = fmMultiSelectMulti
.ListStyle = fmListStyleOption
End With
End Sub
Private Sub CommandButton1_Click()
Dim i As Long
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then
Debug.Print ListBox1.List(i)
End If
Next i
End Sub
この例では、ワークシートのセル範囲"A1:B5"のリストをチェックボックスを付けてListBox1に表示します。複数選択したのち、CommandButton1をクリックすると選択されている項目を出力します。
(図1)
MultiSelectプロパティをfmMultiSelectExtendedに設定すると、Shiftキーを押しながらクリックすることで連続データを選択できます。またMultiSelectプロパティをfmMultiSelectSingleに設定した場合、複数項目の選択ができないため、チェックボックスはオプションボタンに変更されます。
(図2) |
・ControlTipText:マウスポインタをコントロール上に置いたとき、表示する文字列を設定します。
・Enabled:ListBoxコントロールの場合、Trueで通常の表示と操作ができます、Falseで淡色表示となり、イベントに応答しなくなります。
・Font:コントロールで表示するテキスト属性を設定します。
・ForeColor:コントロールの前景色を指定します。ListBoxコントロールの場合、表示されるTextの文字色を設定します。
・Height、Width:コントロールの高さ、幅をポイント単位で指定します。
・Left、Top:コントロールの位置をフォーム左端、上端からの距離を基準に設定します。
・IMEMode:コントロールがフォーカスを取得したとき日本語入力システムの実行モードを設定します。以下の設定が可能です。
0-fmIMEModeNoControl |
IME のモードを変更しません (既定値)。 |
1-fmIMEModeOn |
IME をオンにします。 |
2-fmIMEModeOff |
IME をオフにして英語モードにします。 |
3-fmIMEModeDisable |
IME をオフにします。ユーザーはキー操作によってIMEをオンにすることができなくなります。 |
4-fmIMEModeHiragana |
全角ひらがなモードで IME をオンにします。 |
5-fmIMEModeKatakana |
全角カタカナ モードで IME をオンにします。 |
6-fmIMEModeKatakanaHalf |
半角カタカナ モードで IME をオンにします。 |
7-fmIMEModeAlphaFull |
全角英数モードで IME をオンにします。 |
8-fmIMEModeAlpha |
半角英数モードで IME をオンにします。 |
・Locked:コントロールを編集可能にするかどうかを設定します。Trueで編集不可、False(既定値)編集可になります。編集不可になっていてもEnabledプロパティがTrueに設定されていればイベントが発生しフォーカスを取得することが可能です。
・MatchEntry:ListBoxコントロールで、リストの項目を検索する際の規則を設定します。値の取得も可能です。
0-fmMatchEntryFirstLetter |
基本マッチング。入力した文字と1文字目が一致する候補を検索します。 |
1-fmMatchEntryComplete |
拡張マッチング。入力した文字とすべて一致する項目を検索します (既定値)。 |
2-fmMatchEntryNone |
マッチングを行いません。 |
・MousePointer、MouseIcon:コントロールの上にカーソルを置いたときに表示する形状を設定します。MouseIconはMousePointerが99-fmMousePointerCustomのときに、表示する画像をLoadPicture関数で読み込みます。
(例)
ListBox1.MousePointer = fmMousePointerHourGlass
この例では、コントロールにカーソルを合わせるとカーソル形状が砂時計に変更されます。 |
ListBox1.MousePointer = fmMousePointerCustom
ListBox1.MouseIcon = LoadPicture("C:\test.ico")
この例では、コントロールにカーソルを合わせるとC:\にあるtest.icoにカーソル形状が変更されます。 |
・Name:コントロールの名前を設定、取得します。
・Parent:指定したコントロールを含む親オブジェクトを操作します。
(例)
ListBox1.Parent.BackColor = vbRed
この例では、ListBox1コントロールが配置されている親オブジェクト(UserFormやFrameなど)の背景色を赤に変更します。 |
・TabIndex:タブオーダー内の順番を設定します。先頭のインデックスは0 です。
・TabStop:FalseにするとTab キーによるフォーカス移動の際、このオブジェクトをスキップします。
・Text、Value:選択されている行を変更します。。ListBoxコントロールの場合、Textプロパティの値は既にあるリストの見出しと一致しなければなりません。既にあるリストの見出しと一致しない場合、エラーが発生します。
またValueプロパティには、BoundColumn プロパティに設定された列の値が設定されます。
・Tag:コントロールに補足的な情報(文字列)を設定、取得できます。
・TextAlign:文字列を配置する位置を設定します。
1 - fmTextAlignLeft文字列を左端に表示します (既定値)。
2 - fmTextAlignCenter文字列を中央揃えで表示します。
3 - fmTextAlignRight文字列を右端に表示します。
・Visible:オブジェクトの表示・非表示を設定します。Trueで表示、Falseで非表示です。
■ ListBoxコントロールオブジェクトのメソッド
・AddItem:リストに項目を追加します。複数行のテキストが設定されている場合は、一覧に行を追加します。
(例)
Private Sub UserForm_Initialize()
Dim i As Long
ListBox1.ColumnCount = 2
ListBox1.BoundColumn = 2
For i = 1 To 5
ListBox1.AddItem Range("A" & i)
ListBox1.List(i - 1, 1) = Range("B" & i)
Next i
End Sub
この例では、ワークシートのセル範囲"A1:B5"のリストをListBox1に設定します。コントロールのListプロパティは0を開始値とした二次元配列になっています。そのためListプロパティでB列を設定する際に、インデックス(カウンタの"i")から1を減算します。 |
・Clear:ListBoxコントロールでClearメソッドを呼び出すと、リストの項目がすべて削除されます。
・RemoveItem:ListBoxコントロールのリストから行を削除します。行を表す開始値0の数値を指定します。1行目を削除するには0を指定します。RowSourceプロパティにデータソースが指定されている場合、リストから行を削除することはできません。
・Move:コントロールを移動します。
(例)
ListBox1.Move 100, 50, 200, 150
この例では、ListBox1コントロールをUserFormの左端から100、上端から50ポイントの位置に移動させ、幅200、高さ150ポイントで表示します。 |
・ZOrder:指定されたオブジェクトのZオーダーを変更します。fmTopでその他のコントロールの最前面に、fmBottomでその他のコントロールの最背面に表示します。
■ ListBoxコントロールオブジェクトのイベント
・DblClick:コントロールをダブルクリックしたとき発生します。
・MouseDown、MouseUp:MouseDownはマウスボタンを押したとき、MouseUpはマウスボタンを離したときに発生します。
(例)
Private Sub ListBox1_MouseDown(ByVal Button As Integer, _
ByVal Shift As Integer, _
ByVal X As Single, _
ByVal Y As Single)
UserForm1.Caption = "MouseDown"
End Sub
Private Sub ListBox1_MouseUp(ByVal Button As Integer, _
ByVal Shift As Integer, _
ByVal X As Single, _
ByVal Y As Single)
UserForm1.Caption = "MouseUp"
End Sub
この例では、ListBox1コントロールをクリックしている間はUserForm1のCaptionに"MouseDown"の表示がされ、クリックを離すと"MouseUp"の表示に変わります。 |
・MouseMove:コントロールの上にカーソルが移動したとき発生します。
・Change:コントロールの文字列を変更したときに発生します。
・AfterUpdate、BeforeUpdate:コントロールの文字列を変更した後、他のコントロールにフォーカスを移したときに発生します。
AfterUpdateは実際にデータが変更された後に発生します。
BeforeUpdateは変更を実際にデータが変更される前に発生するため引数CancelにTrueを設定すると、フォーカスは元のコントロールに残り、AfterUpdateイベントもExitイベントも発生しません。
(例)
Private Sub ListBox1_Change()
Debug.Print "Change"
End Sub
Private Sub ListBox1_AfterUpdate()
Debug.Print "AfterUpdate"
End Sub
Private Sub ListBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Debug.Print "BeforeUpdate"
If Not IsNumeric(ListBox1.Text) Then
Cancel = True
End If
End Sub
この例では、ListBox1コントロールの文字列が変更されるたびにChangeイベントが発生します。他のコントロールにフォーカスを移す際、BeforeUpdateイベントで入力内容が数値かどうかをチェックし、数値でなければ変更をキャンセルします。数値の場合は、他のコントロールにフォーカスが移り、AfterUpdateイベントが発生します。 |
・Enter、Exit:Enterイベントは、同一フォーム上にある別のコントロールからフォーカスを受け取る前に発生します。Exit イベントは、同一フォーム上にある別のコントロールにフォーカスを移す前に発生します。
以上で、ListBoxコントロールオブジェクトの解説を終わります。
次回は、CheckBoxコントロールオブジェクトの解説を行います。
|