第12回.リストボックス(ListBox)の追加
ユーザーフォーム入門として基礎から解説します。
リストボックスについて解説します。
前回コンボボックスで単一列(1列)の場合を説明しましたので、今回は特に複数列について詳しく説明します。
リストボックスの追加
ラベルとリストボックスを追加します。

リスト:lst都道府県
リストに表示するのは、
都道府県コードと、都道府県名称の2列になります。
リストボックスのプロパィ
Columnプロパティ
RowSourceプロパティ
一般的には、RowSourceプロパティかListプロパティが良いでしょう。

Listプロパティ
With Me.lst都道府県
.ColumnCount = 2
.List = Worksheets("都道府県マスタ").Range("A2:B48").Value
End With
.ColumnCount = 2
これが列数の指定です。
とりあえず、以下の2列表示されますね。

それには、ColumnWidthsプロパティを設定します。
With Me.lst都道府県
.ColumnCount = 2
.ColumnWidths = "30;80"
.List = Worksheets("都道府県マスタ").Range("A2:B48").Value
End With
ColumnWidthsプロパティ
幅に 0 が設定された列は表示されません。
ポイント以外の単位で指定する場合は、単位(in,cm)を明示してください。
ただし、プログラムの可読性や拡張性を考えると、コードで指定した方が良い場合が多いと思います。
また、
Worksheets("都道府県マスタ").Range("A2:B48").Value
これは2次元配列になります。
従って、2次元配列を変数定義しその配列にデータを入れてから、
Listプロパティに配列を指定しても同じ事になります。
Columnプロパティ
With Me.lst都道府県
.ColumnCount = 2
.Column = WorksheetFunction.Transpose(Worksheets("都道府県マスタ").Range("A2:B48").Value)
End With
このように、Transpose関数で行列を入れ替えればListプロパティと同様となります。
使われることはあまり無いと思います。
RowSourceプロパティ
With Me.lst都道府県
.ColumnCount = 2
.ColumnWidths = "30;80"
.ColumnHeads = True
.RowSource = Worksheets("都道府県マスタ").Range("A2:B48").Address(External:=True)
End With
.ColumnHeads = True
これは列見出しを表示する指定です。
Listプロパティでは無効となります。
RowSourceに指定したセル範囲の1行上のセル値が、見出しとして表示されるようになります。

選択されたリスト項目の取得
変数 = Me.lst都道府県.Text
変数 = Me.lst都道府県.Value
上記では、どちらも都道府県コードが取得されます。
これは、
BoundColumnプロパティ
このプロパティが初期値の1になっているからです。
ValueプロパティはBoundColumnプロパティで指定された列の値を取得します。
Text:都道府県コード
Value:都道府県名
このように取得されます。
変数 = Me.lst都道府県.List(Me.lst都道府県.ListIndex, 0)
変数 = Me.lst都道府県.List(Me.lst都道府県.ListIndex, 1)
このように、Listプロパティの第2引数に列位置(0開始)を指定することで任意の列の値を取得できます。
リストボックスの複数選択
では、ここからはリストボックスならではの問題に入ります。
今回の例では、都道府県なので、実際には複数選択の必要はありませんが、
例として、複数選択した場合として説明しておきます。
複数選択には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
変数 = .List(i)
Exit For
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)とすれば全解除されます。
同じテーマ「ユーザーフォーム入門」の記事
第9回.標準モジュールとフォーム間のデータ受け渡しⅠ
第10回.標準モジュールとフォーム間のデータ受け渡しⅡ
第11回.コンボボックス(ComboBox)の追加
第12回.リストボックス(ListBox)の追加
第13回.チェックボックス(CheckBox)の追加
第14回.オプションボタン(OptionButton)の追加
第15回.ここまでの整理と全VBA
第16回.アクティブコントロールに色を付ける
第17回.Enterキーで次のコントロールに移動する
第18回.2段階のコンボボックス
第19回.数値専用のテキストボックス
新着記事NEW ・・・新着記事一覧を見る
ピッボットテーブルって便利だよね|還暦のVBA(2021-10-18)
還暦のVBA:VBAまでたどりつけるか… (2021-09-29)
VLOOKUPを使うことを基本としてシートを設計すべきか|エクセル雑感(2021-08-17)
コンピューターはブラックボックスで良い|エクセル雑感(2021-08-14)
小文字"abc"を大文字"ABC"に変換する方法|エクセル雑感(2021-08-13)
ADOでテキストデータを集計する|VBAサンプル集(2021-08-04)
VBA学習のお勧めコース|エクセル雑感(2021-08-01)
エクセル馬名ダービー|エクセル雑感(2021-07-21)
在庫を減らせ!毎日棚卸ししろ!|エクセル雑感(2021-07-05)
日付型と通貨型のValueとValue2について|エクセル雑感(2021-06-26)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.Excelショートカットキー一覧|Excelリファレンス
3.RangeとCellsの使い方|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.繰り返し処理(For Next)|VBA入門
6.ひらがな⇔カタカナの変換|エクセル基本操作
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロって何?VBAって何?|VBA入門
9.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
10.並べ替え(Sort)|VBA入門
- ホーム
- マクロVBA応用編
- ユーザーフォーム入門
- リストボックス(ListBox)の追加
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。