エクセルマクロVBA

ワークシートの表の内容をリストボックスに表示する

投稿日:


動画で楽にパソコンが身につく方法はこちら>>

またワークシート上に表を用意しておき、その表の内容をリストボックスに表示させる

こともできます。

 


 

この設定を行うには、まずフォーム上にリストボックスを追加し、

リストボックスを選択した状態で「プロパティウインドウ」の「オブジェクト名」で

例えば「lst商品」と名前を付けておきます。

 


 

 

次に「コードの表示」ボタンをクリックしてコードの表示に切り替えます。


次に「Private Sub UB UserForm_Initialize()」内に

赤枠内のコードを記述します。

 


 

Dim 商品マスター As Range

はじめにRange型の商品マスターという変数を宣言します。

 

Set 商品マスター = Worksheets(“list”). _

Range(Worksheets(“list”).Cells(4, 1), _

Worksheets(“list”).Cells(Rows.Count, 1).End(xlUp))

 

次にこの変数「商品マスター」にリストボックスに表示したいワークシートの表への

参照を代入します。

Set 商品マスター = 表への参照

 

ここではワークシート「list」にある商品マスターの表のA4セルからA6セルまでの部分を参照します。


 

Set 商品マスター = Worksheets(“list”). _

Range(Worksheets(“list”).Cells(4, 1), _

Worksheets(“list”).Cells(Rows.Count, 1).End(xlUp))

 

 

そこで、Worksheets(“list”)Rangeプロパティを使用して範囲を指定します。

レンジプロパティではRange(起点,終点)と指定しますが、ここでは

 

起点に「Worksheets(“list”).Cells(4, 1)」としてワークシート「list」の

4行目の1列目のセルを起点としています。


 

次に終点としてWorksheets(“list”).Cells(Rows.Count, 1).End(xlUp)として

ワークシート「list」で

Cells(Rows.Count, 1)はワークシート内の最終行の1列目から、

End(xlUp)プロパティで上方向へ向かって検索し、最初にデータが入ったセル、

ここでは6行目のセルを終点としています。


 

このように記述することで表に入っているデータの行数に関係なく、常に

データの入っているセルの中で一番下のものを参照することができます。

lst商品.RowSource = 商品マスター.Address(External:=True)

 

次にリストボックス「lst商品」のRowSource プロパティを使用してリストボックスに

値を入力することができます。

 

RowSourceプロパティ

ある範囲の内容をリストボックスやコンボボックスに項目として追加。

 

[書式]

リストボックス. RowSource = 項目にする範囲    

 

[]

リストボックス.RowSource = “A3:A5”

A3からA5までのセル範囲の値をリストボックスに追加)

 

 

商品マスター.Address(External:=True)

 

変数「商品マスター」に対してAddressプロパティを使用することによって

変数「商品マスター」が参照しているA4からA6セルというセル番地を取得することができます。

 

またAddressプロパティには引数を使用することができ、引数に「External:=True」と

指定することによって商品マスターの表がどのワークシートにあってもセル番地を取得できるようになります。


 

最後にSet 商品マスター = Nothing

として変数「商品マスター」の参照をクリアしておきます。


動画で楽にパソコンが身につく方法はこちら>>

-エクセルマクロVBA

Copyright© エクセルVBA使い方入門 , 2023 All Rights Reserved Powered by STINGER.