PR

【ExcelVBA】ユーザーフォームのコンボボックスのリスト範囲を可変で設定する方法

エクセルVBA-ユーザーフォームのコンボボックス-可変対応-アイキャッチ ユーザーフォーム

エクセルのユーザーフォームでコンボボックス(プルダウンから選択するリスト)を作成する方法について説明します。基本的な作成方法からリスト範囲を可変にして作成する方法まで説明しています。

スポンサーリンク

ユーザーフォームのコンボボックスを作成する方法(範囲固定)

まずはコンボボックスの作成方法について説明します。

ユーザーフォームの作成画面でツールボックスからコンボボックスのアイコンを選択します。

アイコンが小さくて分かりにくいですが、左から4番目のアイコンにカーソルを合わせると「コンボボックス」と表示されます。

エクセルVBA-ユーザーフォームのコンボボックス-ツールボックスのコンボボックスのアイコン

アイコンを選択したあとは設置したい場所にマウスを持っていきドラッグアンドドロップして場所と大きさを設定します。

エクセルVBA-ユーザーフォームのコンボボックス-コンボボックスを作成する

コンボボックスを設置した後は、コンボボックスのプロパティ設定で、プルダウンリストに何を表示するかを「RowSource」という項目で設定します。

今回は「リスト1」というシートにある部門名のリスト「営業部」「運用部」「管理部」を表示させたい為、RowSouceの値には「リスト1!A2:A4」と入力します。

エクセルVBA-ユーザーフォームのコンボボックス-コンボボックスのRowSourceの設定

ユーザーフォームを表示させて動きを確認してみます。

コンボボックスのプルダウンをクリックすると指定したリストの値が表示されました。

エクセルVBA-ユーザーフォームのコンボボックス-設定後
スポンサーリンク

コンボボックスのリストの範囲を可変にする方法

上で説明した方法ではリストに新しい項目が加わったときに、毎回ユーザーフォームのRowSouceの値を変更しなければなりません。

性別(男性or女性)など、決まった値しかない場合は良いですが、部門名など増えたり減ったりすることが考えられるリストの場合は、リストの範囲は可変にしたいと思います。

リストの値を可変にしたい場合はコンボボックスのプロパティのRowSouceの欄は空欄にしておき、ユーザーフォームを開く時に実行されるマクロの方でリスト範囲を設定していきます。

ユーザーフォームが開かれるときに実行されるマクロは「Private Sub UserForm_Initialize」なのでこの中でRowSouceを指定します。

RowSouceの値の範囲をリスト1シートのA列の2行目から最終行までと指定します。
この場合は最終行が6行目なので2行目~6行目までが範囲としてセットされます。

エクセルVBA-ユーザーフォームのコンボボックス-可変対応-InitializeでRowSouceを設定する
Private Sub UserForm_Initialize()

    'コンボボックスの値をセット(A列の2行目~最終行まで)
    Me.ComboBox1.RowSource = "リスト1!A2:A" & Worksheets("リスト1").Cells(Rows.Count, 1).End(xlUp).Row

End Sub

ユーザーフォームを表示して動きを確認してみます。
最終行の「人事部」まで表示されていることが確認できました。

エクセルVBA-ユーザーフォームのコンボボックス-可変設定後
スポンサーリンク

※コードのコピー利用について

・コードのコピーは自由におこなっていただけます。
・気を付けて作成はしていますがコードには誤りがある可能性があります。
・自身の環境で動作確認をしていますが、すべての方の環境で同様に動くことは保証できません。
・データの破損等の責任は負いかねますのでご自身の責任のもとお使いください。
・記事の内容は適宜変更することがありますのでご了承ください。

タイトルとURLをコピーしました