ユーザーフォームのリストボックスの使い方・よく使う機能12選

userform リストボックス

ユーザーフォーム使っていてちょっとめんどくさいと思った経験ありませんか?

決まった数字や文字の入力ならば、簡単にしませんか?

<span class="fz-12px">とりっぷぼうる</span>
とりっぷぼうる

リストを作成しておいて、リスト内から選ぶようにすれば簡単・便利・早い。

これが、ユーザーフォームのパーツでもあるリストボックスです。

スポンサーリンク

リストボックス(ListBox)とは?

リストボックスはユーザーフォームツールボックスの中にあり、直接文字などの入力はできません。

エクセル2016のツールボックス
エクセル2016のツールボックス

ユーザーフォームに配置できるパーツの中のひとつで、選択すべき項目をリストの中からクリックして選ぶことができるようになっています。

これにより、毎回テキストボックスに項目を入力する手間が省けるので、作業時間の効率化ができます。

インターネットでの入力画面で、都道府県や西暦などを入力する際に下記のようなリスト見たことありませんか?

listbox

これがリストボックスです。

ここには10個項目があるのですが、表示できないリストはスクロールバーを上下することで表示されます。

ユーザーフォーム内も限られたスペースなので、有効活用もできますので活用することも多くなります。

リストからクリックして選択ボタンを押せば、選択した項目が指定したセルへ記載することができます。

セルの値をリストボックスに反映(リスト化)する

まずリストボックスを使うには、リストボックスにリスト表示させる設定をしなければなりません。

先ほどもお話しした通り、リストボックス自体に文字入力はできないので、表示させたいリストを準備しましょう。

まずは基本的で簡単なリストボックスに表示させるためのリスト化について、下記ページで簡単にまとめています。

セルを使わずにリストボックスに値を登録する(AddItem)

一般的にセルの値を反映させてリストボックスに値を表示させますが、変更する予定がない値ならばユーザーフォーム自体にリスト登録をすれば、誤ってセルを消される心配から解放されますので、AddItemを使うリスト登録方法もマスターしておきましょう。

AddItem登録の値をまとめてセルに記載する

エクセルでユーザーフォームのリストボックスに項目登録にAddItemを使った場合に、セルに記載したいと思ったことはありませんか?

セルからリストボックスは一般的ですが、この逆のパターンはちょっと頭を悩ましますが、すぐにできますよ。

リストボックス内を2列表示や選択リストをセルに記載する

リストボックスの初期設定は1列(1項目)のみリスト化されるようになっていますが、用途によっては2列・3列と1つのリストボックスで複数列表示させてより便利に使うことができます。

その為には、リストボックスの設定をしなくてはいけませんし、記載するVBAコードも列を指定するVBAコードを付け加えなくてはいけませんので、チョットだけ工夫が必要です。

でも安心してください、複雑ではなく列に則って法則通りVBAコードを書けばすぐに完成させることができます。

リストを追加する

リストボックスは直接入力ができないので、リストにない文字を入力できません。

もちろんセルに直接書き込んでも問題ないのですが、せっかくなのでユーザーフォームにテキストボックスとコマンドボタンを付け加えて、リスト追加できるようにして利便性を高めていきましょう。

リストを削除する

リストボックスに値やリスト(項目)の追加をすることがあれば、当然不要なリストを削除も必要です。

ただし、エラーになりやすいのでリストボックスの設定の確認が必要です。

RowSourceプロパティを自動更新

表示させるリスト(項目)をセル範囲とリンク・連動させるためにプロパティのRowSourceを設定しますが、リスト(項目)追加したら当然RowSourceプロパティも修正しないといけないので面倒だと思いませんか?

そこで追加したら自動的にRowSourceプロパティを書き換える、自動更新機能を付け加えると非常に便利です。

セルの範囲を自動取得する方法(複数列対応)

リストボックスのプロパティでリスト化するセルの範囲をRowSourceで指定してしまうと、いざ追加した時には自動的にリストに反映できません。

そこでその都度設定が必要になるのでとても面倒だと思いませんか?

ユーザーフォームが表示させる時に自動的にリストボックスにデータを反映させる範囲をチェックして自動取得させればとても便利です。

リストボックスのよくあるエラー表示の対処法

誰もが出会うリストボックスのエラー。

「実行時エラー301」、Listプロパティ値を取得できません。プロパティの配列のインデックスが無効です

VBAコード合っているし、テストしながらVBAコード書いているのでエラーなんてならないのに何で?って感じじゃないですか?

VBAコード書いてエクセル操作している人が触ると問題なくても、みんなで共有してエクセル使うと思いもよらない操作されてエラーになっちゃうんです。

特定の項目を選択状態にしてリスト表示させる

リストボックスが表示された時に選ぶ確率が高い項目(指定行)を選択状態にさせて、1クリック分の手間を省きたいと思ったことありませんか?

たった1行付け加えるだけでお好みのリストを選択状態(初期設定)にすることができます。

リスト選択だけでセルに自動記載

時短・手間削除!

リストを選択に1クリック、セルに記載させるのに1クリックが一般的ですが、コマンドボタンをクリックなしで、リストボックスの表示項目を選ぶだけで自動的に指定したセルに記載しましょう。

複数行選択できるように設定変更

リストボックスはリスト(項目)が複数表示された中から1つ選択できるのですが、2つ以上選びたい時に同じ作業を2回以上繰り返すのは面倒だと思いませんか?

1つのリストボックスに表示されたリスト(項目)をまとめて複数選択できたら便利なので、初期設定を変更して複数選択できるように設定をしましょう。

複数行選択して別々のセルに表示・記載

ユーザーフォームのリストボックスの設定を変更して複数行を選択できるようにしたら、選択状態のリスト(項目)をセルに表示(記載)したいと思いませんか?

それも1つのセルにまとめて改行して表示したり、別々のセルに表示させたり。

繰り返し処理と入力済み最終行(列)のVBAコードを使って、たった7行のVBAコードで完成できます。

スポンサーリンク

コンボボックスとの違い

ユーザーフォームのコントロールの中にリストボックスとよく似たコンボボックスがあります。

いったいこの違いは何だろう?って思ったことありませんか?

他のコントロールと違い、明らかに似ているのでどちらを使ったらいいか迷いますが、違う点を理解すればどちらを使うべきか決めることができますよ。

同じように使える点

リスト登録方法

リストボックスもコンボボックスもリスト登録には、RowSourceにセルの範囲を記載したり、VBAコードでAddItemを使ってリストを登録する点。

リスト使用方法

リストボックスもコンボボックスも登録したリストが表示されて、その中から選択する点。

コンボボックスしかできない点

コンボボックスは登録して表示されたリストに選択肢が無い場合は、自分で直接文字入力ができる点。

また、選択肢から選べるのは1つだけです。

リストボックスしかできない点

リストボックスは登録されたリスト以外は選択できません。

また初期設定はコンボボックス同様に選択肢から選べるのは1つですが、設定により複数選択も可能。

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

リスト登録方法や選択方法に関しては一緒なので、片方を覚えればどちらも使えるようになるって事です。

スポンサーリンク

リストボックス活用例

リストボックスを実際に使って作成した実用例です。

リスト登録・削除フォームを作る

エクセルの入力をすればデータ集計や検索を行いますが、入力文字の間違えなどで集計や検索がうまくいかなかったことありませんか?

半角や全角の違いや誤字などが原因です。

これを防ぐためにリストボックスに記載されたリスト(項目)から選択させれば、間違えは起きません。

そこで値やリスト(項目)登録・追加などセルに直接記載してもいいのですが、ユーザーフォームを使って誰でも簡単に正確に入力できるように準備しましょう。

生年月日登録

リストボックスの活用として、エクセル2007の時は「カレンダーコントロール」というパーツがあったので、生年月日などに使っていたのですが、2010以降廃止されました。

そこで、和暦・年・月・日をリストから選べば選択できるようにします。

リストボックスに表示する項目をセルに入力して準備します

リストボックスは指定したセルの値を読み込んでリストボックス内に表示されるようになっているので、まず最初にワークシートにリストボックスに表示したい項目をセルに入力しておきます。

ここでは、右記のようにセルに入力して準備しています。画像の都合上、15行だけ切り取っています。

  • セル【A1~A200】に和暦を入力
  • セル【B1~B12】に誕生月を入力
  • セル【C1~C31】に日にちを入力
スポンサーリンク


リストボックスに作成したリストを表示する

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

listboxプロパティ
listboxプロパティ

先ほどワークシートに予め準備しておいた、表示したい項目(ここでは和暦)をリストボックス(ListBox1)の【RowSource】に登録します。

和暦はセルA1からA200に入力したので【A1:A200】と入力するとリストボックスに反映され表示します。

同じ作業を繰り返します。

ListBox2には、誕生月なので【B1:B12】

ListBox3には、日にちなので【C1:C31】

これですべての表示設定は完了です。

但し、このままでは和暦が毎回昭和1年が表示されて毎回スクロールが必要なので、キーボードの上下矢印を使って、最初に表示する和暦を選んでおくとスクロールの範囲が少なくなるのでお勧めします。

リストから選んだ日付をセルに転記する方法

最後にリストボックスで選んだ日付をセルに転記するコードをコマンドボタンに記述します。

セルの場所などは実際に住所録で使っているコードをそのまま記載した。

リストボックスからセルへ転記
VBA解説
  1. Withステートメント開始でコマンドボタン(CommandButton1)をクリックしたら
  2. リストボックス(ListBox1)の作業
  3. もしリストが選択されていなかったら(ListIndex = -1)
  4. セルB1が空欄ならばB1に
  5. そうでない時は
  6. セルB1の1行下右20列にリストから選択された値を転記する
  7. Ifステートメント終了
  8. Withステートメント終了
  9. リストボックス(ListBox2)の作業
  10. もしリストが選択されていなかったら(ListIndex = -1)
  11. セルB1が空欄ならばB1に
  12. そうでない時は
  13. セルB1の1行下右21列にリストから選択された値を転記する
  14. Ifステートメント終了
  15. Withステートメント終了
  16. リストボックス(ListBox2)の作業
  17. もしリストが選択されていなかったら(ListIndex = -1)
  18. セルB1が空欄ならばB1に
  19. そうでない時は
  20. セルB1の1行下右22列にリストから選択された値を転記する
  21. Ifステートメント終了
  22. Withステートメント終了
  23. マクロ終了

これで和暦と誕生月と誕生日がそれぞれのセルに転記されました。

転記した和暦・月・日をひとつにまとめよう

ちなみに列20はV、列21はW、列22はXになっています。

このバラバラになっている和暦と誕生月と誕生日をひとつのセルにまとめるのは簡単な数式で、まとめて【YYYY年MM月DD日】とひとつのセルに表示するならば、

年月日をまとめる

=TEXT(V2&W2&X2,”yyyy年m月d日”)

と、記載すればまとまります。

Excel-VBAの知識がまだ浅いので、複雑なVBAコードを探すよりは、エクセル関数をうまく組み合わせながら住所録なども作る事ができますよ。