Excelユーザーフォーム入門 | 第11回.コンボボックス(ComboBox)の追加 | Excelマクロのユーザーフォームの基礎、エクセルVBAの入門解説



最終更新日:2013-02-18

第11回.コンボボックス(ComboBox)の追加


ユーザーフォームで良く使われるコントロールは、

ラベル、テキストボックス

これは当然ですが、その次に良く使われるものは、

コンボボックス、リストボックス、チェックボックス、オプションボタンになるでしょう。

今回から、この3つのコントロールの使い方の解説をします。


今回は、コンボボックスです。


では、まずは以下のように、ラベルとコンボボックスを追加して下さい。



オブジェクト名は、

ラベル:lbl区分
コンボ:cmb区分


としておきます。

さて、この区分は、顧客のランクにしてみましょう。

Aランク、Bランク、Cランク

これらを選択できるようにします。

では、「コード表示」して、以下のイベントを作成します。

Private Sub UserForm_Initialize()

End Sub

Initializeイベントは、

オブジェクトが読み込まれたあとで、そのオブジェクトが表示される前に発生します。

簡単に言えば、最初に1回だけ実行されるということです。

従って、1度だけ実行すれば良い処理はここに書く事になります。

Aランク、Bランク、Cランク、これらの文字列をコンボボックスに追加するには、何通りかの方法があります。


AddItemメソッド

Private Sub UserForm_Initialize()
  Me.cmb区分.AddItem "Aランク"
  Me.cmb区分.AddItem "Bランク"
  Me.cmb区分.AddItem "Cランク"
End Sub

このように、AddItemメソッドを使用します。

このサンプルでは、次々に末尾に項目が追加されます。

追加する位置を指定する場合は、

.AdItem 項目, 順序

と指定します。

Private Sub UserForm_Initialize()
  Me.cmb区分.AddItem "Aランク", 0
  Me.cmb区分.AddItem "Bランク", 0
  Me.cmb区分.AddItem "Cランク", 0
End Sub

このようにすると、逆順に項目が並ぶことになります。


Listプロパティ

Private Sub UserForm_Initialize()
  Dim ary区分(2) As String
  ary区分(0) = "Aランク"
  ary区分(1) = "Bランク"
  ary区分(2) = "Cランク"
  Me.cmb区分.List = ary区分
End Sub

このように配列をコンボボックスの項目に一括で追加することが出来ます。


RowSourceプロパティ

Worksheets("Sheet1").Range("A1:A3")、ここにデータがあるとして、

Private Sub UserForm_Initialize()
  Me.cmb区分.RowSource = Worksheets("Sheet1").Range("A1:A3").Address(External:=True)
End Sub

このように、シートのセルとリンクさせることが出来ます。

注意点は、セル範囲のオブジェクトを指定するのではなく、シート名も含んだセル範囲を表すアドレス文字列を指定します。

上記のWorksheets("Sheet1").Range("A1:A3").Address(External:=True)は、

[ブック名]Sheet1!$A$1:$A$3

となります。

Externalを指定しないと、単に$A$1:$A$3となってしまう為にエラーとなります。


Styleプロパティについて

定数 内容
fmStyleDropDownCombo 0 コンボ ボックス (ComboBox) コントロールは、選択項目のリストを持つコンボ ボックスとして機能します。
編集領域に値を入力したり、選択項目のリストから値を選択することができます。
fmStyleDropDownList 2 コンボ ボックス (ComboBox) コントロールは、リスト ボックスとして機能します。
リストから値を選択しなければなりません。

初期値では、fmStyleDropDownComboとなっていますので、リストに無い項目を手入力が可能となっています。

どちらにするかは、適宜選択する必要があります。


コンボボックスで選択した値を取得

セルor変数 = Me.cmb区分.Text
セルor変数 = Me.cmb区分.Value
セルor変数 = Me.cmb区分.List(Me.cmb区分.ListIndex)

上記3通りは、通常は同じ結果となります。

ただし、

Style=fmStyleDropDownCombo

この場合は、最期のMe.cmb区分.List(Me.cmb区分.ListIndex)これでは都合が悪いです。

Me.cmb区分.ListIndex

これは、コンボボックスの選択されたリスト位置ですので、

Style=fmStyleDropDownComboの場合に、リストに無い項目を入力した場合は、

この値は-1となっていますので、これでは取得できません。

従って、Style=fmStyleDropDownComboの場合には、

Me.cmb区分.Text

これで取得する事になります。


コンボボックスの指定リストを選択状態にする

For i = 0 To Me.cmb区分.ListCount - 1
  If Me.cmb区分.List(i) = 指定文字列 Then
    Me.cmb区分.ListIndex = i
    Exit For
  End If
Next

または、TextプロパティやValueプロパティに値を設定する事でも可能です。

しかし、その場合は、コンボボックスに設定されているリスト内の文字列かどうかが問題となります。

Style=fmStyleDropDownComboの場合は、リスト内に無くてもエラーとなりませんが、

Style=fmStyleDropDownListの場合はエラーとなってしまいますので、

シートのセル値を設定する場合は、上記サンプルのようにするか、

On Error Resume Nextの指定が必要になります。

そのような場合の細かいテクニックは、後々にあらためて解説します。


複数列のコンボボックス

複数列のコンボボックスを作成する場合は、

.ColumnCount
.ColumnWidths

これらのプロパティを設定します。

複数列はコンボボックスでは使用頻度が低いので、次回のリストボックスで詳しく説明します。

指定方法はリストボックスと同じになります。




同じテーマ「Excelユーザーフォーム入門」の記事

第12回.リストボックス(ListBox)の追加
第13回.チェックボックス(CheckBox)の追加
第14回.オプションボタン(OptionButton)の追加
第15回.ここまでの整理
第16回.アクティブコントロールに色を付ける
第17回.Enterキーで次のコントロールに移動する
第18回.2段階コンボボックス

新着記事 ・・・新着記事一覧を見る

Excelファイルを開かずにシート名をチェック|ExcelマクロVBAサンプル集(3月23日)
数式の参照しているセルを取得する|ExcelマクロVBAサンプル集(3月18日)
CSVの読み込み方法(改の改)|ExcelマクロVBAサンプル集(3月17日)
変数とプロシージャーの命名について|ExcelマクロVBA技術解説(2月12日)
ファイルの一覧取得・削除(File)|Google Apps Script入門(1月24日)
フォルダの一覧取得・作成・削除(Folder)|Google Apps Script入門(1月24日)
フォルダとファイルを扱う(DriveApp)|Google Apps Script入門(1月24日)
スプレッドシートが非常に遅い、高速化するには|Google Apps Script入門(1月17日)
画像のトリミング(PictureFormat,Crop)|ExcelマクロVBAサンプル集(12月27日)
シート保護|Google Apps Script入門(12月24日)

アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.RangeとCellsの使い方|ExcelマクロVBA入門
3.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
4.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
5.セルの参照範囲を可変にする(OFFSET,COUNTA,MATCH)|エクセル関数超技
6.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
7.変数とデータ型(Dim)|ExcelマクロVBA入門
8.ひらがな⇔カタカナの変換|エクセル基本操作
9.CSVの読み込み方法|ExcelマクロVBAサンプル集
10.VBAのFindメソッドの使い方には注意が必要です|ExcelマクロVBA技術解説



  • >
  • >
  • >
  • コンボボックス(ComboBox)の追加

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。

    ↑ PAGE TOP