Excelユーザーフォーム入門 | 第12回.リストボックス(ListBox)の追加 | Excelマクロのユーザーフォームの基礎、エクセルVBAの入門解説



最終更新日:2013-02-18

第12回.リストボックス(ListBox)の追加


単一列(1列)の場合は、コンボボックスと同様なので、

今回は、複数列について説明します。

複数列の扱いは、コンボボックスも同様になります。


作成するリストは、都道府県を選択するリストにしてみます。

ラベルとリストボックスを追加します。



ラベル:lbl都道府県
リスト:lst都道府県


オブジェクト名は上記にしておきます。

リストに表示するのは、

都道府県コードと、都道府県名称の2列になります。

では、リストに追加するには、

・Columnプロパティ
・Listプロパティ
・RowSourceプロパティ


いずれかを使用しますが、一般的には、

RowSourceプロパティかListプロパティで良いでしょう。

Columnプロパティは、Listプロパティと同じ使い方になりますので省略します。


Worksheets("都道府県マスタ")


このデータをリストに追加します。


Listプロパティ


UserForm_Initializeに以下を追加

With Me.lst都道府県
  .ColumnCount = 2
  .List = Worksheets("都道府県マスタ").Range("A2:B48").Value
End With

.ColumnCount = 2

これが列数の指定です。

とりあえず、以下の2列表示されますね。



でも、列幅がちょっと変ですよね、コード列は狭くしたいところです。

それには、

With Me.lst都道府県
  .ColumnCount = 2
  .ColumnWidths = "30;80"
  .List = Worksheets("都道府県マスタ").Range("A2:B48").Value
End With

このように、列幅を;(セミコロン)で区切って指定します。

数値は適宜修正して下さい。

.ColumnCountもColumnWidthsも、フォーム編集の画面でプロパティに直接入れても構いません。

ただし、プログラムの可読性や拡張性を考えると、コードで指定した方が良い場合が多いと思います。

また、

Worksheets("都道府県マスタ").Range("A2:B48").Value

これは2次元配列になります。

従って、2次元配列を変数定義し、その配列にデータを入れてから、

Listプロパティに配列を指定すれば同じ事になります。


さて、複数列になると、各列の見出しが欲しくなります。


RowSourceプロパティ

With Me.lst都道府県
  .ColumnCount = 2
  .ColumnWidths = "30;80"
  .ColumnHeads = True
  .RowSource = Worksheets("都道府県マスタ").Range("A2:B48").Address(External:=True)
End With

.ColumnHeads = True

これが列見出しを表示する指定です。

ただし、このプロパティは、RowSourceを指定した場合にのみ有効となります。

RowSourceに指定したセル範囲の1行上のセル値が、見出しとして表示されるようになります。


選択されたリスト項目の取得

セルor変数 = Me.lst都道府県.Text
セルor変数 = Me.lst都道府県.Value

上記では、どちらも都道府県コードが取得されます。

これは、

BoundColumnプロパティ

これが初期値は1になっています。

なので、TextもValueも1列目の都道府県コードが取得されます。

BoundColumn = 2

とした場合は、

Text:都道府県コード
Value:都道府県名

このように取得されます。

つまり、BoundColumnプロパティで指定した列が、Valueプロパティで取得されることになります。

でも、2列ならTextかValueで取得できますが、3列以上の場合はどうするのでしょうか。

セルor変数 = Me.lst都道府県.List(Me.lst都道府県.ListIndex, 0)
セルor変数 = Me.lst都道府県.List(Me.lst都道府県.ListIndex, 1)

このように、Listプロパティの第2引数に列位置(0開始)を指定します。


ここまでは、コンボボックスも同様の扱いになります。

では、ここからはリストボックスならではの問題に入ります。

リストボックスでは、複数選択が必要な場合があります。

今回の例では、都道府県なので、実際には複数選択の必要はありませんが、

例として、複数選択した場合として説明しておきます。

複数選択には、MultiSelect プロパティを指定します。

MultiSelect プロパティ

定数 内容
fmMultiSelectSingle 0 項目は 1 つだけ選択できます (既定値)。
fmMultiSelectMult 1 複数選択を許可します。
項目の選択/選択解除を行うには、Space キーを押すか、またはクリックします。
fmMultiSelectExtended 2 複数選択を許可します。
Shift キーを押しながらクリックするか、または Shift キーを押しながら方向キーを押すと、現在選択されている項目を始点として一連の項目を連続的に選択できます。
項目の選択/選択解除を個別に行うには、Ctrl キーを押しながらクリックします。

これで簡単に複数選択可能になります。

問題は、複数選択した場合の、複数の選択値の取得や、選択を全て一括で解除したりする場合です。


複数選択されたリスト項目の取得

Dim i As Integer
With Me.lst都道府県
  For i = 0 To .ListCount - 1
    If .Selected(i) = True Then
      セルor変数 = .List(i)
    End If
  Next
End With

ListCountでリストの件数を取得し、Selectedで選択の有無を判定し、Listで選択値を取得します。

複数列の場合は、List(i, 列位置)となります。


では、

リストを全て選択したり、全て解除したりするサンプルコードです。

Private Sub リスト全選択解除(ByVal blnSel As Boolean)
  Dim i As Integer
  With Me.lst都道府県
    For i = 0 To .ListCount - 1
      .Selected(i) = blnSel
    Next
  End With
End Sub

Call リスト全選択解除(True)とすれば全選択されます。
Call リスト全選択解除(False)とすれば全解除されます。





同じテーマ「Excelユーザーフォーム入門」の記事

第13回.チェックボックス(CheckBox)の追加
第14回.オプションボタン(OptionButton)の追加
第15回.ここまでの整理
第16回.アクティブコントロールに色を付ける
第17回.Enterキーで次のコントロールに移動する
第18回.2段階コンボボックス
第19回.テキストボックス数値編集

新着記事 ・・・新着記事一覧を見る

Excelファイルを開かずにシート名をチェック|ExcelマクロVBAサンプル集(3月23日)
数式の参照しているセルを取得する|ExcelマクロVBAサンプル集(3月18日)
CSVの読み込み方法(改の改)|ExcelマクロVBAサンプル集(3月17日)
変数とプロシージャーの命名について|ExcelマクロVBA技術解説(2月12日)
ファイルの一覧取得・削除(File)|Google Apps Script入門(1月24日)
フォルダの一覧取得・作成・削除(Folder)|Google Apps Script入門(1月24日)
フォルダとファイルを扱う(DriveApp)|Google Apps Script入門(1月24日)
スプレッドシートが非常に遅い、高速化するには|Google Apps Script入門(1月17日)
画像のトリミング(PictureFormat,Crop)|ExcelマクロVBAサンプル集(12月27日)
シート保護|Google Apps Script入門(12月24日)

アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.RangeとCellsの使い方|ExcelマクロVBA入門
3.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
4.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
5.セルの参照範囲を可変にする(OFFSET,COUNTA,MATCH)|エクセル関数超技
6.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
7.変数とデータ型(Dim)|ExcelマクロVBA入門
8.ひらがな⇔カタカナの変換|エクセル基本操作
9.CSVの読み込み方法|ExcelマクロVBAサンプル集
10.VBAのFindメソッドの使い方には注意が必要です|ExcelマクロVBA技術解説



  • >
  • >
  • >
  • リストボックス(ListBox)の追加

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。

    ↑ PAGE TOP