GEN MUTO'S HOMEPAGE  エクセル大事典  エクセルVBAを極める

エクセルExcel大事典 エクセル大事典TOPページへ
 ■ エクセルVBA中級編−ユーザーフォームを使いこなす
  ComboBoxコントロールについて詳しく知ろう!
 
■ 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なら貼り付け不可です。値の取得のみ可能です。

ListColumn: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の文字色を設定します。

HeightWidth:コントロールの高さ、幅をポイント単位で指定します。
LeftTop:コントロールの位置をフォーム左端、上端からの距離を基準に設定します。

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でリスト内の項目と一致しない文字列も入力できます (既定値)。 

MousePointerMouseIcon:コントロールの上にカーソルを置いたときに表示する形状を設定します。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 キーによるフォーカス移動の際、このオブジェクトをスキップします。

TextValue:選択されている行を変更します。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:コントロールをダブルクリックしたとき発生します。

MouseDownMouseUp: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:コントロールの上にカーソルが移動したとき発生します。

KeyDownKeyUp: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:コントロールの文字列を変更したときに発生します。
AfterUpdateBeforeUpdate:コントロールの文字列を変更した後、他のコントロールにフォーカスを移したときに発生します。
  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イベントが発生します。

EnterExit:Enterイベントは、同一フォーム上にある別のコントロールからフォーカスを受け取る前に発生します。Exit イベントは、同一フォーム上にある別のコントロールにフォーカスを移す前に発生します。

以上で、ComboBoxコントロールオブジェクトの解説を終わります。
次回は、ListBoxコントロールオブジェクトの解説を行います。

>> 次の話にすすむ


サイト内検索ができます

Microsoft Most Valuable Professional

Microsoft MVP Excel
武藤 玄 プロフィール
 

本を執筆しました
ストーリーで学ぶ Excel VBAと
業務改善のポイントがわかる本

Webでは書ききれなかった技術的
解説や描き下ろしイラスト満載
初版限定公式模擬問プレゼント
 

VBAエキスパート公式サイトにて、
連載コラムを執筆しています
毎月10日更新、「やってみよう!
Excel/Access VBAで業務改善

 

本を執筆しました
VBAエキスパート公式テキスト
Access VBA ベーシック
Access VBA スタンダード
VBAエキスパート新試験の
合格を目指す方は必読です
 

本を執筆しました
Excel VBA ゲーム作成入門
Excel VBAの究極テクニックを
惜しげもなく大公開!


TOPページ


■ エクセルVBA超入門

 ・9ステップで"Hello World!"
  からオブジェクト指向まで!
  1."Hello World!"を表示しよう
  2.基本はデータの入出力
  3.繰り返し処理
  4.シートで簡易データベース
  5.名前をつけよう
  6.構造化プログラムに挑戦
  7.構造体を使ってみよう
  8.フォームを使ってみよう
  9.オブジェクト指向に挑戦

■ エクセルVBA中級編

 ・VBAでいろんなテクニック
  変数・関数のスコープ
  引数の参照方法を明示
  配列の中身を一気に複写
  識別子がよいコードを作る
  データ定義型をもっと知ろう
  定数と列挙型を活用しよう
  エラー処理の重要性1
  エラー処理の重要性2
  いろいろな条件分岐
  いろいろな繰り返し処理
  演算子について知ろう
  文字列操作 連結 変換 置換
  文字列操作 検索 比較 書式
  日付操作関数を知ろう
  数値操作・評価・その他関数
  並び替えソートをマスター
  いろいろな検索をマスター
  VBEditorを使いこなそう
  マクロの記録を活用しよう1
  マクロの記録を活用しよう2
  VBAからVBEを操作しよう1
  VBAからVBEを操作しよう2
  VBAからVBEを操作しよう3
 ・ワークシートを使いこなす
  セルの参照をマスターしよう
  セルの選択をマスターしよう
  セルの操作をマスターしよう
  セルの書式設定をマスターしよう
  行・列の操作をマスターしよう
  シートの参照をマスターしよう
  シートの操作をマスターしよう
  ブックの操作をマスターしよう
  ウィンドウの操作をマスターしよう
  イベントプロシージャを活用しよう
  ワークシートを印刷しよう1
  ワークシートを印刷しよう2
  音声(読み上げ)機能を操作しよう
  グラフを操作しよう
 ・ユーザーフォームを使いこなす
  ユーザーフォームを使おう
  UserFormsオブジェクト
  Labelコントロール
  TextBoxコントロール
  ComboBoxコントロール
  ListBoxコントロール
  CheckBoxコントロール
  OptionButtonコントロール
  ToggleButtonコントロール
  CommandButtonコントロール
  ScrollBarコントロール
  SpinButtonコントロール
 ・VBA関数の一覧
  Aから始まる関数の一覧
  Cから始まる関数の一覧
  Dから始まる関数の一覧
  Eから始まる関数の一覧
  Fから始まる関数の一覧
  Gから始まる関数の一覧
 
■ エクセルVBAを極める
 VBAスーパーテクニック
 
 ・データベースへ接続してみよう!
  CSVファイルへの接続
  ワークシートへの接続
  mdbファイルへの接続
  SQL Serverへの接続
  ADOレコードセットの操作1
  ADOレコードセットの操作2
 ・ファイルを操作してみよう!
  FileSystemObjectの操作
  Drive File Folderの操作
  TextStream ダイアログ
  ステートメントでファイル操作1
  ステートメントでファイル操作2
 ・他アプリと連携してみよう!
  ActiveXオートメーションの操作
 ・ゲーム技でマクロを超える
  エクセルで音を鳴らす1
  エクセルで音を鳴らす2  
  スクリーン座標を取得
  様々なイベント取得
  リボンUIを制御しよう1
  リボンUIを制御しよう2
  シート上でアニメを動かそう
 
■ 一歩上行くエクセル
 基本操作の完全マスター!

 
 ・あなたはいったい
  エクセルで何をしたいのか?
  エクセルで業務効率化
  エクセル関数を使いこなす
  エクセルの便利技
  エクセルは最高の帳票ツール
 ・エクセル基本操作上級編!
  セル選択、コメント、シリアル値
  オート機能を使いこなそう!
  参照、条件付書式、入力規則
  関数をもっと理解しよう!
  配列数式を有効利用しよう!
  データの正規化をしよう!
  ショートカットキーを利用しよう1
  ショートカットキーを利用しよう2
 ・世間の誤ったエクセルの
  べからず集
  エクセルで文章を書くべからず
  エクセルで図形を描くべからず
  エクセルでシステムをつくるな
 
■ エクセル関連その他

 ・エクセルコミニュティにあなたも
  参加しませんか?
  Excel関連リンク・コミニュティ
 ・VBの理解がVBAをマスターする
  最短距離!
  VB関連の老舗・大家サイト
 ・エクセルExcel大事典掲示板
 ・プライバシーポリシー

2000アイテムを超えるラベルを販売
送料無料、即納対応の優良ショップ
今買っているラベルより確実に安い!
OAラベルの販売専科グラフトラベル




エクセルExcel大事典ははリンクフリーです エクセル大事典Excel大事典
お問い合わせはこちら gengengen@yahoo.co.jp

Copyright© Gen Muto 武藤 玄 All Rights Reserved,