■ ComboBoxコントロールについて詳しく知ろう
前回に引き続き、ExcelエクセルにおけるUserFormユーザーフォームの解説です。
今回は、ComboBoxコントロールオブジェクトの解説です。
ComboBoxコントロール(コンボボックスコントロール)オブジェクト
テキストボックス(TextBox)コントロールのように値を直接入力することも、リストボックス(ListBox)コントロールのようにプルダウンメニューの中から選択することもできます。
既定のプロパティ:Valueプロパティ
既定のイベント:Changeイベント
■ ComboBoxコントロールオブジェクトのプロパティ
・AutoSize:Trueで表示内容の文字に合わせて、コントロールの大きさを自動調整します。Falseでコントロールの大きさを固定します(自動調節しません)。
・MaxLength:ComboBoxコントロールに入力できる最大文字数を設定します。
・AutoTab:MaxLengthに設定された最大文字数が入力されたとき、フォーカスを次のコントロールに移すかどうかを設定します。
・BackColor:コントロールの背景色を設定します。背景色はRGB関数、整数、定数で指定することが可能です。コントロールの背景スタイルがFmBackStyleOpaqueになっている必要があります。
・BackStyle:コントロールの背景スタイルを設定します。0 - fmBackStyleTransparentで背景を透明に、1 - FmBackStyleOpaqueで背景を不透明にします。既定値は1です。
(例)
ComboBox1.BackStyle = fmBackStyleTransparent
この例では、ComboBox1コントロールの背景を透明にしています。 |
・BoderColor:コントロールの境界線色を設定します。コントロールの境界線スタイルがfmBorderStyleSingleになっている必要があります。
・BoderStyle:コントロールの境界線スタイルを設定します。0 - fmBorderStyleNoneで境界線を表示しません。1 - fmBorderStyleSingleで境界線を表示します。既定値は0です。
・CanPaste:クリップボードにあるデータがコントロールに貼り付け可能かどうかを返します。Trueなら貼り付け可能で、Falseなら貼り付け不可です。値の取得のみ可能です。
・List、Column:ComboBoxコントロール内に複数の項目を設定します。
ListプロパティとColumnプロパティは、共にリスト形式(2次元配列)のデータをコントロールに設定します。値の取得も可能です。ListとColumnは、相対するプロパティで行、列の指定が逆になります。Listプロパティは(行,列)の順に、Columnプロパティは(列,行)の順に設定します。
・ColumnCount:ComboBoxコントロールに表示する列の数を設定します。
・ColumnWidths:複数列のあるComboBoxで各列の幅をポイント単位、または単位を指定して設定します。
・ListCount:ComboBoxコントロールにあるリストの数(行数)を返します。
・ListIndex:ComboBoxコントロールで、現在選択されている行のインデックスを返します。開始値は0です。
・ListRows:ComboBoxコントロールに一度に表示できる行の最大数を設定します。
・ListWidth:ComboBoxコントロールのリスト部分の幅を設定します。既定値はコントロールの幅と同じになります。
(例)
Private Sub UserForm_Initialize()
Dim MyVar1 As Variant
Dim MyVar2 As Variant
MyVar1 = Range("A1:B5")
MyVar2 = Range("A1:E2")
With ComboBox1
.ColumnCount = 2
.ColumnWidths = "50;50"
.List() = MyVar1
End With
With ComboBox2
.ColumnCount = 2
.ColumnWidths = "50;50"
.Column() = MyVar2
End With
End Sub
この例では、ワークシートのセル範囲"A1:B5"のリストをComboBox1に、"A1:E2"のリストをComboBox2にそれぞれ設定します。ComboBox1の場合、Listプロパティによって、"A1:B5"のセルに入力されている値が、そのままコントロール上に反映されます。ComboBox2の場合は、Columnプロパティによって、"A1:E2"のセルに入力されている値が、行列を入れ替えてコントロール上に反映されます。Variant変数に代入されたセルのデータは1を開始値とした二次元配列になっていますが、コントロールのプロパティでは0を開始値とした二次元配列になっています。List、Columnプロパティで値を取得する場合は、インデックスの指定に注意する必要があります。 |
(例)
TextBox1 = ComboBox1.List(2, 1)
TextBox2 = ComboBox2.Column(1, 2)
先ほどの例を用いた場合、TextBox1には"B3"セルの値が、TextBox2には"C2"セルの値がそれぞれ設定されます。 |
・RowSource:ComboBoxコントロールのソースを設定します。
・ControlSource:コントロールのValueプロパティに格納するデータを設定します。またValueプロパティにリンクさせるワークシートのセル範囲を指定します。
・ColumnHeads:ComboBoxコントロールで列の見出しを表示するかどうかを設定します。
・BoundColumn:複数列があるComboBoxコントロールで選択されている行のどの列をコントロールの値として格納するかを設定します。0でListIndexプロパティの値をコントロールに割り当てます。1(既定値)以上で指定した列の値をコントロールに割り当てます。開始値は1です。
・TextColumn:ユーザーが行を選択したときにTextプロパティに格納する列を設定します。開始値は1です。
・TopIndex:リストの先頭に表示される項目を設定します。値の取得も可能です。既定値はリストの1番目の項目です。
(例)
Private Sub UserForm_Initialize()
With ComboBox1
.ColumnCount = 2
.BoundColumn = 2
.RowSource = "A2:B5"
.ControlSource = "C1"
.ColumnHeads = True
End With
End Sub
この例では、ワークシートのセル範囲"A2:B5"のリストをセル範囲"A1:B1"を列見出しにしてComboBox1に設定します。ComboBox1のValueプロパティはセル"C1"と連動しています。ComboBox1のリストから選択し次のコントロールにフォーカスを移したとき、選択した行の2列目の値が、セル"C1"に出力されます。 |
・ControlTipText:マウスポインタをコントロール上に置いたとき、表示する文字列を設定します。
・DragBehavior:コントロールにドラッグアンドドロップを許可するかどうかを設定します。
・fmDragBehaviorDisabledが既定値でドラッグアンドドロップを許可しません。
・fmDragBehaviorEnabledを選択するとドラッグアンドドロップを許可します。
・DropButtonStyle:ComboBoxコントロールのドロップボタンに表示する記号を設定します。
・fmDropButtonStylePlain 0 ボタン上には何も表示しません。
・fmDropButtonStyleArrow 1 下向きの矢印を表示します (既定値)。
・fmDropButtonStyleEllipsis 2 省略記号 (...) を表示します。
・fmDropButtonStyleReduce 3 アンダスコアに似た横棒を表示します。
・Enabled:ComboBoxコントロールの場合、Trueで通常の表示と操作ができます、Falseで淡色表示となり、イベントに応答しなくなります。
・EnterFieldBehavior:コントロールがフォーカスを取得したとき文字列を選択するかどうかを設定します。
・fmEnterFieldBehaviorSelectAllが既定値で文字列をすべて選択します。
・FmEnterFieldBehaviorRecallSelection選択すると文字列を選択しません。
・Font:コントロールで表示するテキスト属性を設定します。
・ForeColor:コントロールの前景色を指定します。ComboBoxコントロールの場合、表示される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に設定されていればイベントが発生しフォーカスを取得することが可能です。
・MatchFound:ComboBoxコントロールに入力された文字列と一致する項目がリストの中にあるかどうかを返します。値の取得のみ可能です。MatchEntryプロパティにfmMatchEntryNoneが設定されているときは、このプロパティを使用できません。
・MatchEntry:ComboBoxコントロールで、リストの項目を検索する際の規則を設定します。値の取得も可能です。
0-fmMatchEntryFirstLetter |
基本マッチング。入力した文字と1文字目が一致する候補を検索します。 |
1-fmMatchEntryComplete |
拡張マッチング。入力した文字とすべて一致する項目を検索します (既定値)。 |
2-fmMatchEntryNone |
マッチングを行いません。 |
・MatchRequired:リスト内にある項目と一致する値しか入力できないようにするかどうかを設定します。Trueでリスト内にある項目と一致する文字列のみを入力できます。Falseでリスト内の項目と一致しない文字列も入力できます (既定値)。
・MousePointer、MouseIcon:コントロールの上にカーソルを置いたときに表示する形状を設定します。MouseIconはMousePointerが99-fmMousePointerCustomのときに、表示する画像をLoadPicture関数で読み込みます。
(例)
ComboBox1.MousePointer = fmMousePointerHourGlass
この例では、コントロールにカーソルを合わせるとカーソル形状が砂時計に変更されます。 |
ComboBox1.MousePointer = fmMousePointerCustom
ComboBox1.MouseIcon = LoadPicture("C:\test.ico")
この例では、コントロールにカーソルを合わせるとC:\にあるtest.icoにカーソル形状が変更されます。 |
・Name:コントロールの名前を設定、取得します。
・Parent:指定したコントロールを含む親オブジェクトを操作します。
(例)
ComboBox1.Parent.BackColor = vbRed
この例では、ComboBox1コントロールが配置されている親オブジェクト(UserFormやFrameなど)の背景色を赤に変更します。 |
・SelectionMargin:文字列左側の余白をクリックすると、その行の文字列を選択できるようにします。Trueが既定値です。
・SelStart:コントロール内文字列のポインタ位置を返します。
・SelLength:コントロール内文字列で選択されている文字数を返します。
・SelText:コントロール内文字列で選択されている文字列を返します。設定することも可能です。
(例)
Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, _
ByVal Shift As Integer)
Debug.Print ComboBox1.SelStart
Debug.Print ComboBox1.SelLength
Debug.Print ComboBox1.SelText
End Sub
この例では、ComboBox1コントロールでKeyUpイベントが発生した際に、現在のポインタ位置、選択されている文字数、選択されている文字列を返します。 |
・Style:ComboBoxコントロールで、値の選択方法または設定方法を設定します。
0-fmStyleDropDownCombo |
編集領域に値を入力したり、選択項目のリストから値を選択することができます。 |
2-fmStyleDropDownList |
リスト ボックスとして機能します。リストから値を選択しなければなりません。 |
・TabIndex:タブオーダー内の順番を設定します。先頭のインデックスは0 です。
・TabStop:FalseにするとTab キーによるフォーカス移動の際、このオブジェクトをスキップします。
・Text、Value:選択されている行を変更します。ComboBoxコントロールの場合、コントロールの値を更新するときにTextプロパティを利用できます。
Textプロパティの値が既にあるリストと一致する場合、ListIndexプロパティの値には、Textプロパティと一致する行が設定されます。
またValueプロパティには、BoundColumn プロパティに設定された列の値が設定されます。
・Tag:コントロールに補足的な情報(文字列)を設定、取得できます。
・TextAlign:文字列を配置する位置を設定します。
1 - fmTextAlignLeft文字列を左端に表示します (既定値)。
2 - fmTextAlignCenter文字列を中央揃えで表示します。
3 - fmTextAlignRight文字列を右端に表示します。
・TextLength:コントロールの編集領域にある文字列の文字数を返します。
・Visible:オブジェクトの表示・非表示を設定します。Trueで表示、Falseで非表示です。
■ ComboBoxコントロールオブジェクトのメソッド
・AddItem:リストに項目を追加します。複数行のテキストが設定されている場合は、一覧に行を追加します。
(例)
Private Sub UserForm_Initialize()
Dim i As Long
ComboBox1.ColumnCount = 2
ComboBox1.BoundColumn = 2
For i = 1 To 5
ComboBox1.AddItem Range("A" & i)
ComboBox1.List(i - 1, 1) = Range("B" & i)
Next i
End Sub
この例では、ワークシートのセル範囲"A1:B5"のリストをComboBox1に設定します。コントロールのListプロパティは0を開始値とした二次元配列になっています。そのためListプロパティでB列を設定する際に、インデックス(カウンタの"i")から1を減算します。 |
・Clear:ComboBoxコントロールでClearメソッドを呼び出すと、リストの項目がすべて削除されます。
・DropDown:ComboBoxコントロールのリスト部分を表示します。
・RemoveItem:ComboBoxコントロールのリストから行を削除します。行を表す開始値0の数値を指定します。1行目を削除するには0を指定します。RowSourceプロパティにデータソースが指定されている場合、リストから行を削除することはできません。
・Move:コントロールを移動します。
(例)
ComboBox1.Move 100, 50, 200, 150
この例では、ComboBox1コントロールをUserFormの左端から100、上端から50ポイントの位置に移動させ、幅200、高さ150ポイントで表示します。 |
・Copy:コントロールの文字列をクリップボードにコピーします。元の文字列は削除されません。
・Cut:コントロールの文字列をクリップボードにコピーします。元の文字列は削除されます。
・Paste:クリップボードの文字列をコントロールに貼り付けます。
・SetFocus:コントロールにフォーカスを移します。
・ZOrder:指定されたオブジェクトのZオーダーを変更します。fmTopでその他のコントロールの最前面に、fmBottomでその他のコントロールの最背面に表示します。
■ ComboBoxコントロールオブジェクトのイベント
・DropButtonClick:選択項目のリストをドロップダウンするか、または非表示にすると発生します。
・DblClick:コントロールをダブルクリックしたとき発生します。
・MouseDown、MouseUp:MouseDownはマウスボタンを押したとき、MouseUpはマウスボタンを離したときに発生します。
(例)
Private Sub ComboBox1_MouseDown(ByVal Button As Integer, _
ByVal Shift As Integer, _
ByVal X As Single, _
ByVal Y As Single)
ComboBox1.Text = "MouseDown"
End Sub
Private Sub ComboBox1_MouseUp(ByVal Button As Integer, _
ByVal Shift As Integer, _
ByVal X As Single, _
ByVal Y As Single)
ComboBox1.Text = "MouseUp"
End Sub
この例では、ComboBox1コントロールをクリックしている間はラベルに"MouseDown"の表示がされ、クリックを離すと"MouseUp"の表示に変わります。 |
・MouseMove:コントロールの上にカーソルが移動したとき発生します。
・KeyDown、KeyUp:KeyDownはキーを押したとき、KeyUpはキーを離したときに発生します。
・KeyPress イベント:ANSI コードまたはシフトJISコードに対応する文字キーのいずれかを押すと発生します。
(例)
Private Sub ComboBox1_KeyDown( _
ByVal KeyCode As MSForms.ReturnInteger, _
ByVal Shift As Integer _
)
ComboBox1.Text = "KeyDown"
End Sub
Private Sub ComboBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
ComboBox1.Text = "KeyPress"
End Sub
Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, _
ByVal Shift As Integer)
ComboBox1.Text = "KeyUp"
End Sub
この例では、"A"文字列キーを押すと、KeyDownイベントに続けてすぐKeyPressイベントが発生するため、ComboBox1コントロールの文字列は"KeyPress"となり、離したときにKeyUpイベントが発生し"KeyUp"の文字列が表示されます。
"Shift"キーを押すと、KeyPressイベントが発生しないため、ComboBox1コントロールの文字列は"KeyDown"となり、離したときに"KeyUp"の文字列が表示されます。 |
・Change:コントロールの文字列を変更したときに発生します。
・AfterUpdate、BeforeUpdate:コントロールの文字列を変更した後、他のコントロールにフォーカスを移したときに発生します。
AfterUpdateは実際にデータが変更された後に発生します。
BeforeUpdateは変更を実際にデータが変更される前に発生するため引数CancelにTrueを設定すると、フォーカスは元のコントロールに残り、AfterUpdateイベントもExitイベントも発生しません。
(例)
Private Sub ComboBox1_Change()
Debug.Print "Change"
End Sub
Private Sub ComboBox1_AfterUpdate()
Debug.Print "AfterUpdate"
End Sub
Private Sub ComboBox1_BeforeUpdate( _
ByVal Cancel As MSForms.ReturnBoolean _
)
Debug.Print "BeforeUpdate"
If Not IsNumeric(ComboBox1.Text) Then
Cancel = True
End If
End Sub
この例では、ComboBox1コントロールの文字列が変更されるたびにChangeイベントが発生します。他のコントロールにフォーカスを移す際、BeforeUpdateイベントで入力内容が数値かどうかをチェックし、数値でなければ変更をキャンセルします。数値の場合は、他のコントロールにフォーカスが移り、AfterUpdateイベントが発生します。 |
・Enter、Exit:Enterイベントは、同一フォーム上にある別のコントロールからフォーカスを受け取る前に発生します。Exit イベントは、同一フォーム上にある別のコントロールにフォーカスを移す前に発生します。
以上で、ComboBoxコントロールオブジェクトの解説を終わります。
次回は、ListBoxコントロールオブジェクトの解説を行います。
|