セルの値やセルの範囲をリストボックスに反映させる方法
ユーザーフォームにリストボックスを配置して、セルの値や範囲から自動的にリスト表示させようと思って調べていませんか?
当然、決まった方法はありますがリストボックスにリスト表示させる方法って、いくつかあるので迷っていませんか?
答えは簡単で、これが正解というものはありませんので、その都度使いやすいVBAコードを使えばいいのです。
セルの値や範囲をリストボックスに反映
プロパティで設定
初めてリストボックスを使う時や、面倒なVBAコードを書かなくてもリストボックスにセルの値や範囲を反映させることができます。
プロパティでの設定は簡単で、リストボックスをユーザーフォームに配置した時は、まだ空欄なのでリストボックスをクリックすると、リストボックスのプロパティが表示されます。
このようにA1:A10と記載すればセルの値が反映されますが、もしリストボックスにリスト化したい項目が追加したいのならば、セルA11に追加したい項目を記載してプロパティのRowSourceもA1:A11に変更すれば完成です。
ちなみにここでは、リストボックスに1列だけの基本リスト化ですが、リストボックスは1列だけじゃなくて2列、3列と複数列リスト化することも可能です。
VBAコードで設定
VBAでもRowSourceを使ってリスト化
リストボックスのプロパティに直接書き込むのではなく、VBAコードで同じように表すことも可能です。
ここでは、ユーザーフォームを開いたと同時にリストボックスにリスト化表示させる設定をしたのが、下記のVBAコードです。
UserForm_Initializeをここでは使用していますが、もちろんコマンドボタンにVBAコードを書いて、コマンドボタンを押したらリスト表示させることもできますが、1クリック分手間がかかるのでUserForm_Initializeを使用しましたので、詳しくは下記をご覧くださいませ。
AddItemメソッドとセル番地を組み合わせる
この方法のままでは実際には使った事は無いのですが、VBAコードのAddItem+セル番地でセルの値をリスト登録できます。
ね、さっきのRowSourceを使った方がVBAコードスッキリしますよね。
だから実際には使った事無いのですが、これでもちゃんとリスト化はできます。
セルを使わないでVBAだけでリスト作成
今までは、セルの値を取得してリストボックスのリストに反映させる方法をご紹介しましたが、今度はUserForm_InitializeにはRowSource設定ではなく、リスト自体を記載してしまう方法です。
この方法を使うとセルの範囲は関係なくなるので、セルの取得範囲設定の必要がありませんでの、ワークシートは綺麗なままなのです。
RowSource設定を使わずにセルの値をリストボックスに反省させるには、VBAのAddItemメソッドを使ってリスト作成をします。
では先ほどのA1~A10に記載していた10項目をAddItemを使ってVBAコードを書くとこうなります。
全然難しくないですよね、そしてリストが増えたらEnd Withの上の行に.AddItem “追加項目”とするだけなので、こちらの方法も活用してみてはいかがですか?