【エクセルVBA】ユーザーフォームのリストボックスを使ってみよう!


ユーザーフォーム,リストボックス

皆様こんにちは、ノグチです。

エクエルのユーザーフォームを作って使ってみることを目標に、連載記事でユーザーフォーム上のコントロールのプロパティやイベントをご紹介しています。

前回は、コマンドボタンのClickイベントで、ワークシートの値を、テキストボックスに入力されている値で更新する方法をご紹介しました。

【エクセルVBA】コマンドボタンのClickイベントでワークシートを更新してみよう
エクセルのユーザーフォームを作って使ってみるまで、を目標にした連載記事です。 今回は、エクセルのユーザーフォーム上に入力した値で、ワークシート上のリストを更新・追加する方法をご紹介しています。ユーザーフォームを使ってマスタ管理ツールなどを作りたい場合に、使える方法ですよ。

ここまでテキストボックスに関係したイベントばかりをご紹介していましたので、今回からはリストボックスをご紹介していきたいと思います。

リストボックス編初回の今回は、ユーザーフォームにリストボックスを追加する方法と、よく使うプロパティをいくつかご紹介していきますよ!

前回までのおさらい

前回までに作成したユーザーフォームがこちら。

ユーザーフォーム,オブジェクト名

テキストボックスとラベルが2つずつと、コマンドボタンが1つ配置されていますね。

今までの記事では、この2つのテキストボックスを連動させたり、値をワークシートに転記してみたりしていましたが、今回はからは、画面の下側にあるテキストボックスをリストボックスに置き換えていきましょう。

リストボックスってどんなもの?

そもそもリストボックスってどんなものなの?というところから見ていきましょう。

リストボックスは、こんな見た目をしています。

ユーザーフォーム,リストボックス

テキストボックスのような見た目のコントロールに、値がリスト形式で並んでいますね。

リストボックスは、図のように表示したい値をリスト形式で表示して、入力者に任意の値を選択させることができるコントロールです。

フォームにリストボックスを追加する

まずは、フォームにリストボックスを追加していきましょう。

もともとあったテキストボックスは一旦削除しておいたので、フォームはこのようになっています。

ユーザーフォーム,テキストボックス削除

では、もともとテキストボックスがあった場所に、リストボックスを追加してみましょう。

ツールボックスを開いて、リストボックスのアイコンをクリックします。

ユーザーフォーム,リストボックス,ツールボックス
マウスカーソルの形が「+」になったら、フォーム上でリストボックスを追加したい場所でドラッグすれば…
ユーザーフォーム,リストボックス追加

この通り、リストボックスがフォームに追加されます。

リストボックスの縦の大きさに合わせる為に、フォーム全体の縦の大きさも少し大きくしておきました。

ツールボックスが画面に表示されていない!という方は、こちらの記事で表示方法をご紹介していますので、併せてご覧ください。

【エクセルVBA】Showメソッドでユーザーフォームをコマンドボタンから開いてみよう!
エクセルの便利機能、ユーザーフォームの作り方と使い方を、連載記事でご紹介しています。今回は、ユーザーフォームにラベルやテキストボックスといったコントロールを追加する方法と、作成したユーザーフォームをワークシートから呼び出す方法をご紹介しています。

リストボックスにオブジェクト名をつける

フォームやテキストボックス、リストボックスなどのコントロールは、任意のオブジェクト名を付けられるのでしたね。

今回追加したリストボックスにも、オブジェクト名をつけておきましょう。
リストボックスのプロパティを開いて…
リストボックス,オブジェクト名

プロパティシートの先頭にある、「(オブジェクト名)」という項目の値を変えれば、オブジェクト名の命名完了です。

今回追加したリストボックスには、「ListRegion」というオブジェクト名をつけました。

リストボックスのプロパティ

プロパティシートを見てわかるように、リストボックスにも多くのプロパティがあります。

今回追加したリストボックスを便利に使えるように、プロパティの設定をしていきましょう。

今回は、プロパティシートの中でもよく使うものをいくつかピックアップしてご紹介していきますよ。

リストボックスに表示させるワークシート上の範囲を指定する:RowSourceプロパティ

まずは、リストボックスに表示させる値を設定するプロパティ、RowSourceプロパティです。

例えば、こちらのリストのB列をリストボックスに表示させたい場合。

テキストボックス,検索用テーブル

このRowSourceプロパティに「B2:B7」をセットすれば…

リストボックス,RowSource

この通りリストボックスに、指定したワークシートの範囲にある値が表示されます。

リストの値を複数選択させるかを設定する:MultiSelectプロパティ

お次は、リストボックスに表示されている値を、複数選択できるようにするかを設定する、MultiSelectプロパティです。

このプロパティに設定できる値と、それぞれの動作は以下の3通りです。

リストボックスの用途に合わせて、値の選択方法を選べますね。

設定値 動作
0 – fmMultiSelectSingle リストボックスの値を、1つだけ選択できるようにする
1 – fmMultiSelectMulti リストボックスの値を、Ctrlキーと左クリックで複数選択できるようにする
2 – fmMultiSelectExtended リストボックスの値を、マウスのドラッグで複数選択できるようにする

リストボックスに表示する列数を設定する:ColumnCountプロパティ

リストボックスは、複数列にすることもできますよ。

この、ColumnCountプロパティの設定値に2以上の数値を設定すれば、リストボックスの列数を指定した数にすることができます。

例えば2と指定した場合、このように2列のリストを表示することができますよ。
リストボックス,ColumnsCount

リストボックスの何列目をValueプロパティの値にするかを設定する:BoundColumnプロパティ

ColumnsCountプロパティで2以上の値を設定した時に使うプロパティ、BoundColumnプロパティです。

このプロパティは、リストボックスのどの列を、このリストボックスのValueプロパティで取得できるようにするかを設定します。

例えば、ColumnsCountプロパティに3を、このBoundColumnsプロパティに1を設定した場合、リストボックスには3列のリストが表示されて、Valueプロパティでこのリストボックスの値を取得する際は、1列目の値が返されることになります。

プロパティだけ見ているとあまり関係ないような気がするプロパティですが、VBAで操作する際には重要になってきます。

最後に

今回は、ユーザーフォームのリストボックスをフォームへ追加する方法と、代表的なプロパティをご紹介しました。

リストボックスは、ユーザーフォームでマスタ管理画面を作りたいときなど、何かと便利に使えるコントロールです。

次回記事では、このリストボックスで選択された値の取得方法や、メソッドをご紹介していきますよ。

それでは、最後までお読みいただきありがとうございました!

連載目次:【エクセルVBA】ユーザーフォームを使ってみよう!

ユーザーフォームは、ちょっとした画面なら作れてしまう、便利な機能です。

何となく敷居が高いように感じてしまいますが、順を追っていけば難しいことはありませんよ。

  1. 【エクセルVBA】ユーザーフォームを作ってみよう!VBEでフォームを挿入する方法
  2. 【エクセルVBA】Showメソッドでユーザーフォームをコマンドボタンから開いてみよう!
  3. 【エクセルVBA】コマンドボタンのClickイベントとUnloadステートメントでユーザーフォームを閉じる方法
  4. 【エクセルVBA】テキストボックスのプロパティで入力を便利にしよう
  5. 【エクセルVBA】テキストボックスでよく使う3つのイベントを使ってみよう
  6. 【エクセルVBA】Initializeイベントでワークシートの値をユーザーフォームの初期値にセットする
  7. 【エクセルVBA】AfterUpdateイベントでテキストボックス同士を連動させてみよう
  8. 【エクセルVBA】コマンドボタンのClickイベントでワークシートを更新してみよう
  9. 【エクセルVBA】ユーザーフォームのリストボックスを使ってみよう!
  10. 【エクセルVBA】リストボックスのRowSourceプロパティの値を変動させてみよう!
  11. 【エクセルVBA】AddItemメソッドでリストボックスに値を追加してみよう!
  12. 【エクセルVBA】リストボックスのListプロパティで複数列の値を更新する

 

  投稿者プロフィール

ノグチフリーランスPG・SE
元製造子会社SE。
業務システム保守・導入両方やった経験をお伝えすることで、少しでもシステムや手作業に悩まされる人が減ればいいなぁと日々夢見ております。

タイトルとURLをコピーしました