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

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

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

(Last modified: )

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

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

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

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

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

1列のリストボックスに使用する

1 列の項目をリストボックスに追加する場合、ワークシートには同じ列のセルにデータを入力してください。例えばワークシートに次のようにデータを入力し、 RowSource プロパティには "Sheet1!B2:B5" を指定します。

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

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

Option Explicit

Private Sub UserForm_Initialize()
    ListBox1.RowSource = "Sheet1!B2:B5"
End Sub

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

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

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

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

複数例のリストボックスに使用する

複数列の項目をリストボックスに追加する場合、ワークシートには複数列にデータを入力してください。例えばワークシートに次のようにデータを入力し、 RowSource プロパティには "Sheet1!B2:C5" を指定します。

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

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

Option Explicit

Private Sub UserForm_Initialize()
	ListBox1.ColumnCount = 2
    ListBox1.RowSource = "Sheet1!B2:C5"
End Sub

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

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

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

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

ColumnCount プロパティの使い方については「複数列のリストボックスを作成する(ColumnCount,List)」を参照されてください。

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

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

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

Option Explicit

Private Sub UserForm_Initialize()
    ListBox1.RowSource = "Sheet1!B2:B5"
    ListBox1.AddItem "バナナ"
End Sub

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

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

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

Option Explicit

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

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

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

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

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

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

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

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

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

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

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

Option Explicit

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

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

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

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

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

-- --

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

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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