PR

 複数のリストデータがあり、一つの親リストからデータを選択すると、その結果に従い、別のリストから適切なデータが選択できるようにしたい・・・という需要は少なくありません。

 たとえば、ワークシートに2つのコンボボックスを配置して、最初のコンボボックスから部署名を選択すると、2番目のコンボボックスにはその部署に所属する社員の名前のみが表示されるような仕組みです(図1)。こうした仕掛けは、Excxelのワークシート関数を駆使しても作成可能ですが、VBAを使うことで機能の拡張性や後のカスタマイズのしやすさが高まるといった利点があります。

 今回は、Excelの入力規則とセルに付けた名前を利用して、ワークシート上の2つのコンボボックスが連携するプログラムを作ってみることにしましょう。

図1 C2セルで所属部署に「総務部」を指定し、氏名を入力するE2セルをクリックすると、総務部に該当する社員のリストが表示される
図1 C2セルで所属部署に「総務部」を指定し、氏名を入力するE2セルをクリックすると、総務部に該当する社員のリストが表示される
[画像のクリックで拡大表示]

表示用のリストを準備する

 プログラムを作成する前に、ワークシートに必要な仕掛けを施します。新規ブックを用意して、1枚目のシートを「報告書」、2枚目のシートを「リスト」と名前を付けます。2枚目のシートには、各部署に所属する社員の名前を入力します。入力後、各部署の社員が入力されているセル範囲を選択し、メニューから「挿入」→「名前」→「定義」で開く「名前の定義」画面で、それぞれのセル範囲に必要な名前を設定しておきます(図2)。

図2 B4~B7セルに「総務部」、D4~D8セルに「営業部」、F4~F6セルに「開発部」と、名前をつけておく
図2 B4~B7セルに「総務部」、D4~D8セルに「営業部」、F4~F6セルに「開発部」と、名前をつけておく
[画像のクリックで拡大表示]