リストボックスの項目のソースとしてワークシートに入力したデータを利用する
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" を指定します。
具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize
イベントに対するイベントプロシージャにコードを記述し、リストボックスのソースとしてワークシート内のセル範囲を指定します。
Option Explicit Private Sub UserForm_Initialize() ListBox1.RowSource = "Sheet1!B2:B5" End Sub
ユーザーフォームを表示すると、リストボックスが表示され指定したセル範囲のデータが項目としてリストボックスに表示されます。
複数例のリストボックスに使用する
複数列の項目をリストボックスに追加する場合、ワークシートには複数列にデータを入力してください。例えばワークシートに次のようにデータを入力し、 RowSource
プロパティには "Sheet1!B2:C5" を指定します。
具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize
イベントに対するイベントプロシージャにコードを記述し、リストボックスのソースとしてワークシート内のセル範囲を指定します。複数列を表示するのでリストボックスの ColumnCount
プロパティに列数を指定しています。
Option Explicit Private Sub UserForm_Initialize() ListBox1.ColumnCount = 2 ListBox1.RowSource = "Sheet1!B2:C5" End Sub
ユーザーフォームを表示すると、リストボックスが表示され指定したセル範囲のデータが項目としてリストボックスに表示されます。
※ ColumnCount
プロパティの使い方については「複数列のリストボックスを作成する(ColumnCount,List)」を参照されてください。
リストボックスのソースにセル範囲を指定する場合の注意点
リストボックスのソースにワークシートのセル範囲を指定する場合、 AddItem
メソッドを使ってリストボックスに項目を追加することはできません。同じように RemoveItem
メソッドを使って項目を削除することもできません。
例えば次のようなコードを入力したあとで「Sub/ユーザーフォームの実行」をクリックしてください。
Option Explicit Private Sub UserForm_Initialize() ListBox1.RowSource = "Sheet1!B2:B5" ListBox1.AddItem "バナナ" End Sub
すると次のように実行時エラーが表示されます。
RemoveItem
メソッドも試してみます。例えば次のようなコードを入力したあとで「Sub/ユーザーフォームの実行」をクリックしてください。
Option Explicit Private Sub UserForm_Initialize() ListBox1.RowSource = "Sheet1!B2:B5" ListBox1.RemoveItem 0 End Sub
すると次のように実行時エラーが表示されます。
このようにリストボックスのソースにセル範囲を指定した場合には、 AddItem
メソッドを使った項目の追加や RemoveItem
メソッドを使った項目の削除は行えませんのでご注意ください。
リストボックスに列見出しを表示する(ColumnHeads)
リストボックスのソースにセル範囲を指定する場合、リストボックスに列見出しを表示することができます。列見出しはリストボックスのソースに指定したセル範囲の一つ上のセルに入力されたデータが使用されます。列見出しを表示するには ColumnHeads
プロパティを使用します。
オブジェクト.ColumnHeads [= Boolean ]
「True」を代入すると列見出しが表示されます。デフォルトの値は「False」で列見出しは表示されません。
例えばワークシートに次のようなデータを入力し、リストボックスのソースのセル範囲として B3:B6 を指定した場合、列見出しに使用されるデータはセル範囲の一つ上の B2 セルに入力されている値となります。
具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize
イベントに対するイベントプロシージャにコードを記述し、リストボックスのソースにセル範囲を指定しています。そして列見出しを表示するために ColumnHeads
プロパティに「True」を設定しています。
Option Explicit Private Sub UserForm_Initialize() ListBox1.RowSource = "Sheet1!B3:B6" ListBox1.ColumnHeads = True End Sub
ユーザーフォームを表示すると、リストボックスが表示され、一番上に列見出しが表示されます。
-- --
Excel のリストボックスの項目のソースとしてワークシートに入力したデータを利用する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。