コンボボックスの項目のソースとしてワークシートに入力したデータを利用する

Excel のユーザーフォームに設置したコンボボックス(ComboBox)コントロールに表示する項目として、 Excel のワークシートに入力したデータを読み込んで表示することができます。ここでは Excel のコンボボックスの項目のソースとしてワークシートに入力したデータを利用する方法について解説します。

※ コンボボックスに項目をメソッドを使って追加する方法については「VBAを使ったコンボボックスの作成と項目の追加および削除」を参照されてください。

(Last modified: )

コンボボックスのソースにワークシートのセル範囲を設定する

コンボボックスで表示する項目は、 AddItem メソッドを使って追加していくこともできますが、ワークシートに入力されたデータのセル範囲を指定して項目として表示することもできます。コンボボックスで用意されている RowSource プロパティを使用します。

オブジェクト.RowSource [= String ]

代入する文字列にはセル範囲を指定します。例えば "A1:A6" などのような文字列を代入します。

ただしセル範囲だけを指定した場合、フォームが表示されたときのアクティブシートの指定したセル範囲が指定されたものとみなされるので、特定のシートに含まれるセル範囲を常に使用する場合はシート名も含めて "Sheet1!A1:A6" のように指定します。複数のブックを開いている場合はブック名も含めて "[Book1]Sheet1!A1:A6" のように指定します。

コンボボックスでは基本的に 1 列の値だけ使用するので、ワークシートには同じ列のセルにデータを入力してください。例えばワークシートに次のようにデータを入力し、 RowSource プロパティには "Sheet1!B2:B6" を指定します。

コンボボックスのソースにワークシートのセル範囲を設定する(1)

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、コンボボックスのソースとしてワークシート内のセル範囲を指定します。

Option Explicit

Private Sub UserForm_Initialize()
    ComboBox1.RowSource = "Sheet1!B2:B6"
End Sub

コンボボックスのソースにワークシートのセル範囲を設定する(2)

コンボボックスのソースにワークシートのセル範囲を設定する(3)

ユーザーフォームを表示すると、コンボボックスが表示され指定したセル範囲のデータが項目としてコンボボックスに表示されます。

コンボボックスのソースにワークシートのセル範囲を設定する(4)

コンボボックスのソースにワークシートのセル範囲を設定する(5)

コンボボックスのソースにセル範囲を指定する場合の注意点

コンボボックスのソースにワークシートのセル範囲を指定する場合、 AddItem メソッドを使ってコンボボックスに項目を追加することはできません。同じように RemoveItem メソッドを使って項目を削除することもできません。

例えば次のようなコードを入力したあとで「Sub/ユーザーフォームの実行」をクリックしてください。

Option Explicit

Private Sub UserForm_Initialize()
    ComboBox1.RowSource = "Sheet1!B2:B6"
    ComboBox1.AddItem "電子レンジ"
End Sub

すると次のように実行時エラーが表示されます。

コンボボックスのソースにセル範囲を指定する場合の注意点(1)

RemoveItem メソッドも試してみます。例えば次のようなコードを入力したあとで「Sub/ユーザーフォームの実行」をクリックしてください。

Option Explicit

Private Sub UserForm_Initialize()
    ComboBox1.RowSource = "Sheet1!B2:B6"
    ComboBox1.RemoveItem 0
End Sub

すると次のように実行時エラーが表示されます。

コンボボックスのソースにセル範囲を指定する場合の注意点(2)

このようにコンボボックスのソースにセル範囲を指定した場合には、 AddItem メソッドを使った項目の追加や RemoveItem メソッドを使った項目の削除は行えませんのでご注意ください。

コンボボックスに列見出しを表示する(ColumnHeads)

コンボボックスのソースにセル範囲を指定する場合、コンボボックスに列見出しを表示することができます。列見出しはコンボボックスのソースに指定したセル範囲の一つ上のセルに入力されたデータが使用されます。列見出しを表示するには ColumnHeads プロパティを使用します。

オブジェクト.ColumnHeads [= Boolean ]

「True」を代入すると列見出しが表示されます。デフォルトの値は「False」で列見出しは表示されません。

例えばワークシートに次のようなデータを入力し、コンボボックスのソースのセル範囲として B3:B7 を指定した場合、列見出しに使用されるデータはセル範囲の一つ上の B2 セルに入力されている値となります。

コンボボックスに列見出しを表示する(ColumnHeads)(1)

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、コンボボックスのソースにセル範囲を指定しています。そして列見出しを表示するために ColumnHeads プロパティに「True」を設定しています。

Option Explicit

Private Sub UserForm_Initialize()
    ComboBox1.RowSource = "Sheet1!B3:B7"
    ComboBox1.ColumnHeads = True
End Sub

コンボボックスに列見出しを表示する(ColumnHeads)(2)

コンボボックスに列見出しを表示する(ColumnHeads)(3)

ユーザーフォームを表示すると、コンボボックスが表示され、一番上に列見出しが表示されます。

コンボボックスに列見出しを表示する(ColumnHeads)(4)

コンボボックスに列見出しを表示する(ColumnHeads)(5)

-- --

Excel のコンボボックスの項目のソースとしてワークシートに入力したデータを利用する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。