【VBA入門】コンボボックスの使い方(リストの初期化、値の取得)

コンボボックスって使っていますか?

コンボボックスとは、VBAのユーザーフォームで使えるパーツの一つで、いくつか登録したテキストの中から選択する場合に使用します

この記事では、コンボボックスについて

  • コンボボックスとは
  • コンボボックスの呼び出し方
  • コンボボックスのリストの初期化
  • コンボボックスの値の取得
  • コンボボックスのメソッドとプロパティ

など基本的な内容から、応用的な内容についても解説していきます。

今回はコンボボックスについて、わかりやすく解説します!

目次

コンボボックスとは?

コンボボックスとは、VBAのユーザーフォームで使えるパーツの一つで、いくつか登録したテキストの中から選択する場合に使用します

コンボボックスがテキストボックスとリストボックスから構成されています。

テキストボックスに入力したテキストをリストボックスに追加したり、リストボックスから選択したテキストをテキストボックスに表示したりすることができます。

combobox05

コンボボックスの呼び出し方

コンボボックスは「ツールボックス」から選択して、フォームにドラッグ&ドロップします。

combobox01

combobox02

なお、ユーザーフォームの呼び出し方、使い方などは、こちらで詳しく解説していますので、ぜひ参考にしてください。

コンボボックスのリストの初期化

コンボボックスにリストを登録する方法についてみていきましょう。

AddItemメソッドの使い方

コンボボックスのリストにテキストを追加するには、AddItemメソッドを使います。

AddItemメソッドは以下のように記述します。

AddItem(Item, [Index])

「[ ]」内は省略することができます。

引数Itemは、追加するテキストを指定します。引数Indexは、追加する項目の位置を指定します。省略された場合は、リストの末尾に追加されます。

コンボボックスから追加する方法

「コンボボックス」のテキストボックスから入力して、テキストを登録することができます。

「コマンドボタン」を押すとリストボックスに登録されるようにします。

この場合の処理の例は以下のとおりです。

Private Sub CommandButton1_Click()
    With ComboBox1
        If .Text <> "" Then
            .AddItem .Text
        End If
    End With
End Sub

Subプロシージャ「CommandButton1_Click()」は、「コマンドボタン」をダブルクリックすると自動で生成されます。

テキストを登録するために、AddItemメソッドを使用しています。AddItemメソッドの引数には、ComboBox1のTextプロパティで取得した値を指定しています。

combobox03

起動時に初期化する方法

また、あらかじめフォームが起動する際に、テキストを登録しておくこともできます。

以下のように記述します。

Private Sub UserForm_Initialize()
    With ComboBox1
        .AddItem "北海道"
        .AddItem "青森"
        .AddItem "岩手"
    End With
End Sub

Subプロシージャ「UserForm_Initialize()」でフォーム起動時の処理を定義します。

combobox04

コンボボックスの値の取得

「コンボボックス」のリストの中から何が選ばれたか取得する方法について、みていきましょう。

ListIndexプロパティの使い方

「コンボボックス」のリストの中から何が選ばれたか取得するには、ListIndexプロパティを使います。

ListIndexプロパティは整数値を取得します。リストの最初の項目が選択されているときの値は0で、2番目の項目が選択されているときはの値は1になります。

サンプルコードで確認しましょう。

Private Sub ComboBox1_Change()
    With ComboBox1
        Range("A1").Value = .ListIndex
    End With
End Sub

Subプロシージャ「ComboBox1_Change()」で値を取得する処理を定義します。

combobox06

Listメソッドの使い方

先ほどは、ListIndexプロパティを使って値を取得する方法についてみてきました。

今度は値ではなく、リストの項目テキストを取得する方法についてみていきましょう。

リストの項目テキストを取得するには、Listメソッドを使います。

List(Index)

引数Indexには、項目のインデックス番号を指定します。

この引数は省略可能で、省略するとリスト全体の項目が文字列配列として返されます。

サンプルコードで確認しましょう。

Private Sub ComboBox1_Change()
    With ComboBox1
        Range("A1").Value = .List(.ListIndex)
    End With
End Sub

combobox07

コンボボックスのメソッドとプロパティ

コンボボックスのメソッドとプロパティについてみていきましょう。

メソッド一覧

メソッドについては以下のとおりです。

メソッド説明
AddItem [Item][, Index]リストに項目を追加します。
引数Itemで追加する文字列を指定します。省略すると空白行が追加されます。
引数Indexで追加する位置を指定します。省略すると末尾に追加されます。
Clearリストに追加された全ての項目を削除します。
RemoveItem Indexリストの項目を1つ削除します。
引数Indexで項目の位置を指定します。

プロパティ一覧

主なプロパティについては以下のとおりです。

プロパティ定数(値)説明
RowSourceExcelシートのセルに入力された項目をリストに追加
ListCountリストの項目数
ListIndex選択されている項目のインデックス番号を取得
ListRowsドロップダウンしたときに表示される項目の最大値を指定
項目数がこの値を超えると、スクロールバーが表示
ListWidthドロップダウンしたときのリストの幅を指定
StylesfmStyleDropDownCombo(0)編集領域に値を入力したり、リストから値を選択することが可能(既定値)
fmStyleDropDownList(2)リストボックスとして機能
DropButtonStylefmDropButtonStylePlain(0)ドロップボタンのスタイルを指定
fmDropButtonStyleArrow(1)
fmDropButtonStyleEllipsis(2)
fmDropButtonStyleReduce(3)

Clearメソッドでリストを削除

それではClearメソッドを使って、リストを全て削除する方法についてみていきましょう。

Private Sub CommandButton1_Click()
    With ComboBox1
        .Clear
    End With
End Sub

「コマンドボタン」を押すと「コンボボックス」のリストが全て削除されるように記述しています。

combobox08

まとめ

ここでは、コンボボックスの使い方について説明しました。

Excelのシート入力だけでは入力フォームとして不足と感じる場合は、ユーザーフォームで使いやすい入力フォームを作れるようになると作業時間や入力ミスの削減になります。

コンボボックスも使いこなすことができるように、この記事を何度も参考にして下さいね!

この記事を書いた人

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
info@sss-lab.com

目次