コンボボックスでリスト項目を追加する方法。ユーザーフォームのコンボボックスコントロールの使いかた 08回

コンボボックスでリスト項目を追加する方法。

ユーザーフォーム講座 動画編 08回 コンボボックスの使いかた
コンボボックスでリスト項目を追加する方法。ユーザーフォームのコンボボックスコントロールの使いかた

動画でExcel コンボボックスでリスト項目を追加する方法。ユーザーフォームのコンボボックスコントロールの使いかた

【VBAユーザーフォーム】コンボボックスでリスト項目を追加する方法。基礎編第8回 マクロ講座中級編

動画版「ユーザーフォーム講座」です。今回はコンボボックスコントロールの使い方を説明します。
コンボボックスはテキストボックスとリストボックスの2つが合体したコントロールです。
リストボックス部分はリストボックスコントロールと同様、 リスト項目を表示してユーザーから選んでもらうということができます。

マクロ動画 コンボボックスでリスト項目を追加する方法。ユーザーフォームのコンボボックスコントロールの使いかた

https://youtu.be/TKzY2sdCo-U

テキストボックスとリストボックスの両方を使いたい

コンボボックスはテキストボックスとリストボックスの2つが合体したコントロールです。
ですから、テキストボックスとリストボックスの両方を使いたいという時に使うと便利です。
コンボボックスの場合のリストは、テキストボックス右端にある下▼をクリックすると表示される、ドロップダウンリストになっています。

NAMAE1

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

NAMAE2

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

NAMAE3

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

NAMAE4

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

NAMAE5

RowSourceプロパティ、プロパティウインドウでの設定

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

NAMAE6

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

NAMAE7
     Dim ws As Worksheet
     Sub Form_Show()
         Form_combo.Show
     End Sub 

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

NAMAE8

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

NAMAE9

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

NAMAE10
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イベント

次にコンボボックスでリスト部分から選択した項目を取得して、 シートに転記するコードを考えてみましょう。
ComboBox1_Changeイベントを使います。 下記のコードでは、リストを選択すると変更すると、そのたびに、B2セルに項目を書き出します。

NAMAE11
Private Sub ComboBox1_Change()
    Set ws = Worksheets("Sheet1")
    ws.Cells(2, 2) = ComboBox1.Text
End Sub

リストにない時は、テキストボックスに直接書くこともできますので、深谷支店と書いてみます。 すると、B2セルに深谷支店と書き出されました。 この直接テキストボックスに書いたデータを破棄するのはもったいないですから、リストに追加したいです。

NAMAE12

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

NAMAE13
     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

コードを追加しましたので起動してリスト項目を追加してみます。
草加支店と書きました。草加支店はないので、追加ボタンをクリックします。

NAMAE14

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