
動画でExcel コンボボックスでリスト項目を追加する方法。ユーザーフォームのコンボボックスコントロールの使いかた
動画版「ユーザーフォーム講座」です。今回はコンボボックスコントロールの使い方を説明します。
コンボボックスはテキストボックスとリストボックスの2つが合体したコントロールです。
リストボックス部分はリストボックスコントロールと同様、
リスト項目を表示してユーザーから選んでもらうということができます。
コンボボックスはテキストボックスとリストボックスの2つが合体したコントロールです。
ですから、テキストボックスとリストボックスの両方を使いたいという時に使うと便利です。
コンボボックスの場合のリストは、テキストボックス右端にある下▼をクリックすると表示される、ドロップダウンリストになっています。

ユーザーはリストから項目を選択することができ、もし選択したい項目がない場合はテキストボックスに入力できるという仕様になっています。

下図のサンプルでは、元のリストに追加するためのボタンを設置しました。 そのまま入力したテキスト項目を次回も使いたい時は、リストのデータとして追加することも可能です。 そしてこれは 追加機能はいらないよという場合、スタイルプロパティの設定から、テキスト入力機能のないドロップダウンリストボックスとして使うこともできます。 リストボックスコントロールとコンボボックスコントロールの使い分けとして考えられるのはスペースを節約するため、 あるいは一覧を常時表示しておきたくない必要な時だけ見ればいいからというようなケース。 それからリストにない項目が見つかった時に気軽に追加したいなどということが挙げられます。

それではユーザーフォームを追加してそこにコンボボックスを配置しましょう。 挿入ボタンからユーザーフォームを挿入します。そこに、コンボボックスを挿入しました。

コンボボックスというのはテキストボックスとそれからリストの合体したものですから、 リストを追加してあげます。リストにリスト項目を設定するには、RowSourceプロパティとAddItemメソッドとListプロパティがあります。

RowSourceプロパティは、プロパティウインドウで設定できます。
"Sheet1!A2:A7"というように、範囲で指定してやります。リストボックスのリストの追加方法と同じです。

起動用のボタンを設置して、以下のコードを記述してからフォームを起動しました。

Dim ws As Worksheet
Sub Form_Show()
Form_combo.Show
End Sub
次にAddItemメソッドを使った方法です。これも追加の方法はリストと全く同じなので 6回で説明したリストへの商品の追加方法の動画を見たり記事を参考に復習してください。

それからAddItemメソッドを使った方法でも、項目が多い時は1つずつ入れるのは面倒ですから、 最終行を取得してFor文で順番に1個ずつ入れていくという形が良いと思います。 どちらも 結果は同じになります。

Listプロパティの場合は、変数を用意して配列として範囲を指定すると、簡単にリストを設定できます。

Private Sub UserForm_Initialize()
Dim arrList As Variant
arrList = Range("A2:A9")
LastRow = Range("A" & Cells.Rows.Count).End(xlUp).Row
ComboBox1.List = arrList
End Sub
次にコンボボックスでリスト部分から選択した項目を取得して、
シートに転記するコードを考えてみましょう。
ComboBox1_Changeイベントを使います。
下記のコードでは、リストを選択すると変更すると、そのたびに、B2セルに項目を書き出します。

Private Sub ComboBox1_Change()
Set ws = Worksheets("Sheet1")
ws.Cells(2, 2) = ComboBox1.Text
End Sub
リストにない時は、テキストボックスに直接書くこともできますので、深谷支店と書いてみます。 すると、B2セルに深谷支店と書き出されました。 この直接テキストボックスに書いたデータを破棄するのはもったいないですから、リストに追加したいです。

追加するためのボタンを 用意して、ボタンをクリックしたらリストの最終行にテキストを入れるようにします。

Private Sub btn_tuika_Click()
Set ws = Worksheets("Sheet1")
LastRow = Range("A" & Cells.Rows.Count).End(xlUp).Row
With ComboBox1
If .ListIndex = -1 Then
.AddItem .Text
ws.Cells(LastRow + 1, 1) = .Text
End If
End With
End Sub
コードを追加しましたので起動してリスト項目を追加してみます。
草加支店と書きました。草加支店はないので、追加ボタンをクリックします。

シートのリストの元となるデータ範囲の一番下に入りましたから、 次回からはここを読み込んでくれるので次回もちゃんと 新しく追加した支店が入るということになります。 これとても便利なコードだと思いますのでぜひ皆様も使ってもらいたいと思います。