- VBA(Excelマクロ)の「リストボックス」について知りたい
- 「リストボックス」の作り方を学びたい
- 「リストボックス」のカスタマイズ方法を知っておきたい
このようなお悩みをお持ちですか?
この記事を読むことで、下記のことがわかります。
- 「リストボックス」とは何かがわかる
- 「リストボックス」の作り方・使い方を学べる
- 「リストボックス」のカスタマイズ方法を知れる
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
-著者情報-
名前:Utatane
VBA(マクロ)歴:3年
Excel使用歴:15年以上
ひとこと:初心者だった当時に戻った気持ちになって解説いたします
VBA(Excelマクロ)のリストボックスとは?

リストボックスは、
上図のようにあらかじめ用意された選択肢の中から1つ(または複数)を選ぶことができるコントロールです。
コンボボックス(プルダウン選択)とは異なり、複数の項目を選択できるのが特長です。
▼リストボックス

▼コンボボックス

では早速、リストボックスの作り方を見ていきましょう。
リストボックスの作り方

上図のように、
「リストボックスから選択した項目が、ExcelのA1セルに書き込みされるマクロ」
を作ってみましょう。
今回はわかりやすくするため、最もシンプルな作り方をお見せします。
手順は以下のとおりです。
- ユーザーフォームの呼び出し
- リストボックスの設置
- コマンドボタンの設置
- コードを追加
- テスト実行
まずはユーザーフォームを呼び出しましょう。
ユーザーフォームの呼び出し
では、ユーザーフォームの呼び出しから始めます。
VBA Project画面の上部メニューから「挿入」→「ユーザーフォーム」をクリックします。
メニューの場所などは下記記事(図解付き)で解説しております。
関連記事{ユーザーフォームの作り方・基礎}
リストボックスの設置
次に、リストボックスを設置します。
画面左下「ツールボックス」の「コントロール」から、「リストボックス」を
ユーザーフォームへドラッグ&ドロップします。

リストボックスが設置できました。

この段階で、コードを表示させておきましょう。
画面左「プロジェクト – VBA Project」下の「コードの表示」をクリックしてください。

コードが表示されました。

このコードは、リストボックスとボタン、セルを連動させるときに編集します。
現段階では使いませんので、「×」で閉じておきましょう。
コマンドボタンの設置
次にコマンドボタンを設置しましょう。
リストボックスと同様に、「ツールボックス」の「コントロール」から、
「コマンドボタン」をユーザーフォームへドラッグ&ドロップします。


リストボックスの時と同じように、コードを表示させましょう。

これでひとまずデザインは完成です。
では次に、コードを追加していきましょう。
コードを追加
初心者の方には少し難しい内容になりますので、最も簡単なコードで作成いたします。
現在、下図のようにコードが表示されているかと思います。

一番下に、下記のコードを追加してください。
Private Sub UserForm_Initialize() ' ユーザーフォーム起動時
ListBox1.AddItem "野球" ' ListBox1(リストボックス)に「野球」を追加する
ListBox1.AddItem "サッカー" ' 同じく「サッカー」を追加する
ListBox1.AddItem "テニス" ' 同じく「テニス」を追加する
End Sub
下図は追加した見本です。

これで、ユーザーフォーム起動時に、各項目がリストボックスに追加されます。
野球などの項目名や項目数は必要に応じて編集してください。
また、「ListBox1」も環境に応じて変更する必要があります。
リストボックスの名前を確認してください。
リストボックスの名前は、コード内「Private Sub ListBox1_Click()」を確認しましょう。
最後に、コマンドボタンを押した際の処理を書きます。
「Private Sub CommandButton1_Click()」の下に
「Range(“A1”).Value = ListBox1.Text」と記述してください。

これでリストボックスで選択した項目がExcelのA1セルに書き込みされるようになります。
繰り返しになりますが、「ListBox1」は必要に応じて変更してください。
以上でリストボックスは完成です。お疲れさまでした!
テスト実行をして動きを確認しましょう。
テスト実行
上部メニューの実行ボタンをクリックしてください。

リストボックスが表示されました。

項目を選択し、コマンドボタン(CommandButton)を押してみます。


選択した項目が、無事A1セルに書き込みされました。成功です。
しかしながら、「CommandButton」のままでは、作りかけ感があります。
次項にて、リストボックスのカスタマイズ方法を解説いたします。
リストボックスのカスタマイズ
パーツのデザイン変更
パーツ(リストボックスやコマンドボタンなど)の位置や大きさ、表示内容の変更が可能です。
- 位置の変更
- 大きさの変更
- 表示内容の変更
- 文字色・背景色の変更 など
詳細は下記記事で解説しております。
関連記事{ユーザーフォームの作り方(図解)}
下記にて簡単にやり方を紹介いたします。
【表示内容の変更】
表示を変更したいパーツをクリックします。
さらにもう一度クリックすると、表示を変更できるようになります。
【位置変更】
パーツの上下左右の輪郭にマウスカーソルを重ねます。
すると四隅に矢印が付いたカーソルに変化する場合があります。
この時、ドラッグすることで、パーツを移動させることができます。
【大きさ変更】
パーツの四隅にマウスカーソルを重ねることで、左右に矢印が付いたカーソルに変化する場合があります。
この時、ドラッグすることで、パーツの大きさを変えることができます。
ユーザーフォームを自動で閉じる
前項で紹介した方法では、コマンドボタンを押してもユーザーフォームが閉じられず、出っ放しになります。
なので、コマンドボタンを押したらユーザーフォームを閉じるコードを追加しましょう。
Unload UserForm1
上記VBAコードがユーザーフォームを閉じる記述です。
「UserForm1」はユーザーフォーム名に応じて変更してください。
下記のように、コマンドボタンを押したら実行される処理の最後に記述しましょう。
Private Sub CommandButton1_Click()
Range("A1").Value = ListBox1.Text
Unload UserForm1
End Sub
繰り返しになりますが、「ListBox1」は必要に応じて変更してください。
コードの種類
リストボックスに項目を追加するコードについてです。
前項では、下記のコードを使いました。
Private Sub UserForm_Initialize()
ListBox1.AddItem "野球"
ListBox1.AddItem "サッカー"
ListBox1.AddItem "テニス"
End Sub
書き方は他にもありますので、紹介いたします。
結果はすべて同じです。書きやすいコードを使ってください。
下記は「Withステートメント」といって、「ListBox1」に対する指令をまとめたものです。
Private Sub UserForm_Initialize()
With ListBox1
.AddItem "野球"
.AddItem "サッカー"
.AddItem "テニス"
End With
End Sub
各行の「ListBox1」が省略され、2行目に記述されているのがわかるかと思います。
関連記事{Withの役割と使い方}
下記は項目を配列に入れた例です。
Private Sub UserForm_Initialize()
ListBox1.List = Array("野球", "サッカー", "テニス")
End Sub
関連記事{配列とは?}
1行で収まるのでコードがスッキリします。
Excelの値から項目を作成

上図のように、Excel内の特定のセルから値を取得し、その値をリストボックスの項目に追加することもできます。
下記VBAコードは、B列にある値をリストボックスの項目に追加した例です。
Private Sub UserForm_Initialize()
Dim i As Long
With ListBox1
.Clear
For i = 1 To Cells(Rows.Count, 2).End(xlUp).Row
.AddItem Cells(i, 2).Value
Next i
End With
End Sub

春夏秋冬や月末など、項目を定期的に変えたい時に便利です。
項目の複数選択
前項で紹介した作成方法では、項目を1つしか選択できません。
複数の項目を選択できるようにするには、プロパティを変更する必要があります。
画面左下の「プロパティ」から、「MultiSelect」を探してください。

「MultiSelect」の右を見てください。
デフォルトだと「0 – fmMultiSelectSingle」になっています。
複数選択を有効にするには、「1」か「2」にする必要があります。
プルダウンをクリックして変更しましょう。
- 0 – fmMultiSelectSingle:項目を1つ選択可
(複数選択不可) - 1 – fmMultiSelectMult:複数選択可
(項目をクリックするたびに複数選択されていく) - 2 – fmMultiSelectExtended:複数選択可
(ctrlキーを押しながらクリックすることで複数選択されていく)
最後の「2」が最も一般的かと思います。

しかしながら、複数選択を有効にした場合、これまでの書き込み方法ではうまく動作しません。
(複数の値を1つのセルに入れることができないため)
下記VBAコードのように、値を1つずつ取得して書き込みするようにしてください。
Private Sub CommandButton1_Click()
Dim i As Long
Dim rowNum As Long
rowNum = 1 ' A列の書き込み開始行
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then
' 選択された項目をA列に書き込む
Sheet1.Cells(rowNum, 1).Value = ListBox1.List(i)
rowNum = rowNum + 1
End If
Next i
End Sub

最後に
VBA(Excelマクロ)のリストボックスについて解説いたしました。
当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!