セルの値やセルの範囲をリストボックスに反映させる方法

セル範囲からいリスト反映 リストボックス

ユーザーフォームにリストボックスを配置して、セルの値や範囲から自動的にリスト表示させようと思って調べていませんか?

当然、決まった方法はありますがリストボックスにリスト表示させる方法って、いくつかあるので迷っていませんか?

答えは簡単で、これが正解というものはありませんので、その都度使いやすいVBAコードを使えばいいのです。

スポンサーリンク

セルの値や範囲をリストボックスに反映

リストボックスリスト

プロパティで設定

初めてリストボックスを使う時や、面倒なVBAコードを書かなくてもリストボックスにセルの値や範囲を反映させることができます。

プロパティでの設定は簡単で、リストボックスをユーザーフォームに配置した時は、まだ空欄なのでリストボックスをクリックすると、リストボックスのプロパティが表示されます。

リストボックスプロパティRowSource
クリックで拡大します

このようにA1:A10と記載すればセルの値が反映されますが、もしリストボックスにリスト化したい項目が追加したいのならば、セルA11に追加したい項目を記載してプロパティのRowSourceもA1:A11に変更すれば完成です。

ちなみにここでは、リストボックスに1列だけの基本リスト化ですが、リストボックスは1列だけじゃなくて2列、3列と複数列リスト化することも可能です。

VBAコードで設定

VBAでもRowSourceを使ってリスト化

リストボックスのプロパティに直接書き込むのではなく、VBAコードで同じように表すことも可能です。

ここでは、ユーザーフォームを開いたと同時にリストボックスにリスト化表示させる設定をしたのが、下記のVBAコードです。

セルの範囲を反映させてリスト化

Private Sub UserForm_Initialize()
ListBox1.RowSource = “A1:A10”
End Sub

VBA解説
  1. 下記の処理をしてからユーザーフォームを表示する
  2. リストボックス1のRowSource設定をA1:A10とする
  3. マクロ終了

UserForm_Initializeをここでは使用していますが、もちろんコマンドボタンにVBAコードを書いて、コマンドボタンを押したらリスト表示させることもできますが、1クリック分手間がかかるのでUserForm_Initializeを使用しましたので、詳しくは下記をご覧くださいませ。

AddItemメソッドとセル番地を組み合わせる

この方法のままでは実際には使った事は無いのですが、VBAコードのAddItem+セル番地でセルの値をリスト登録できます。

AddItem+セル番地

Private Sub UserForm_Initialize()
With UserForm1.Controls(“ListBox1”)
.AddItem Cells(1, 1)
.AddItem Cells(2, 1)
.AddItem Cells(3, 1)
.AddItem Cells(4, 1)
.AddItem Cells(5, 1)
.AddItem Cells(6, 1)
.AddItem Cells(7, 1)
.AddItem Cells(8, 1)
.AddItem Cells(9, 1)
.AddItem Cells(10, 1)
End With
End Sub

ね、さっきのRowSourceを使った方がVBAコードスッキリしますよね。

だから実際には使った事無いのですが、これでもちゃんとリスト化はできます。

スポンサーリンク

セルを使わないでVBAだけでリスト作成

今までは、セルの値を取得してリストボックスのリストに反映させる方法をご紹介しましたが、今度はUserForm_InitializeにはRowSource設定ではなく、リスト自体を記載してしまう方法です。

この方法を使うとセルの範囲は関係なくなるので、セルの取得範囲設定の必要がありませんでの、ワークシートは綺麗なままなのです。

とりっぷぼうる
とりっぷぼうる

RowSource設定を使わずにセルの値をリストボックスに反省させるには、VBAのAddItemメソッドを使ってリスト作成をします。

では先ほどのA1~A10に記載していた10項目をAddItemを使ってVBAコードを書くとこうなります。

AddItemを使ったリスト化

Private Sub UserForm_Initialize()
With UserForm1.Controls(“ListBox1”)
.AddItem “釧路市湿原展望台”
.AddItem “北斗展望台”
.AddItem “温根内展望テラス”
.AddItem “コッタロ湿原展望台”
.AddItem “二本松展望地”
.AddItem “シラルトロ蝶の森展望台”
.AddItem “塘路サルルン展望台”
.AddItem “サルボ展望台”
.AddItem “夢ヶ丘展望台”
.AddItem “細岡展望台”
End With
End Sub

全然難しくないですよね、そしてリストが増えたらEnd Withの上の行に.AddItem “追加項目”とするだけなので、こちらの方法も活用してみてはいかがですか?

リストボックス関連