前回に引き続き、今回もフォーム コントロールの活用例を紹介していこう。今回は、一覧から項目を選択してデータ入力などを行う「コンボボックス」の使い方を紹介する。基本的にはVBAと組み合わせて利用するパーツとなるが、単独で利用できない訳ではない。使い方によっては便利な機能となるので、一度試してみるとよいだろう。

コンボボックスの描画と設定

フォーム コントロールには「コンボボックス」や「リストボックス」と呼ばれるパーツが用意されている。いずれも、一覧から項目を選択することで、様々な動作を行うためのパーツとして活用される。

コンボボックス(左)とリストボックス(右)

通常、これらのパーツはVBAと組み合わせて利用するのが一般的であるが、少し工夫すればVBAなしで利用することも可能だ。今回は、その一例としてコンボボックスの使い方を紹介していこう。

コンボボックスを利用するには、あらかじめ選択肢となるデータ(表)を作成しておく必要がある。今回は「Sheet2」のワークシートに、以下のような3つの表を作成した。

コンボボックスの参照元となるデータ(Sheet2)

続いて、コンボボックスの描画を行う。ここでは「Sheet1」のワークシートにコンボボックスを描画する。まずは「開発」タブにある「挿入」をクリックし、「コンボボックス」のアイコンを選択。この状態でワークシート上をドラッグすると、コンボボックスを描画できる。

(※)Excelの画面に「開発」タブを表示する手順は、前回の連載(第24回)で詳しく解説している。

コンボボックスの描画(Sheet1)

コンボボックスを描画できたら、コンボボックスのサイズと位置を調整して配置を整える。その後、コンボボックスの動作を設定。コンボボックスを右クリックし、「コントロールの書式設定」を選択しよう。

「コントロールの書式設定」の呼び出し

すると、以下の図のような設定画面が表示される。ここでは、選択肢となるデータが入力されているセル範囲を「入力範囲」に指定する。今回は「Sheet2」のB3~B6セルを選択肢とするので、その指定は「Sheet2!B3:B6」となる。「リンクするセル」には、選択された項目を出力するセルを指定する。

入力範囲とリンクするセルの指定

「OK」ボタンをクリックすると、コンボボックスが利用可能になる。試しに▼ボタンをクリックして一覧から項目を選択してみると、「リンクするセル(E5セル)」に数字が表示されるのを確認できるはずだ。

コンボボックスの動作の確認

このようにコンボボックスでは、「何番目の項目が選択されたか?」を示す数字が「リンクするセル」に出力される仕組みになっている。このため、選択した項目をそのままデータとして表示するには少しだけ工夫が必要となる。

関数INDEX()を使ったデータの表示

先ほど紹介したように、コンボボックスで項目を選択しても、リンク先のセルには「何番目の項目が選択されたか?」を示す数字しか表示されない。選択した項目をそのままデータとして表示するには、関数INDEX()を利用しなければならない。

関数INDEX()は、「指定したセル範囲の中で○行目にあるデータ」をピックアップしてくれる関数。その第1引数には「参照元となるセル範囲」、第2引数には「何行目のデータをピックアップするか?」を指定する。

今回の例の場合、選択肢の一覧は「Sheet2」のB3~B6セルにあり、「何番目の項目が選択されたか?」はE5セルに出力される。よって、「=INDEX(Sheet2!B3:B6,E5)」と関数を記述すると、選択した項目をそのままセルに表示できる。

参照元となるデータ(Sheet2)

関数INDEX()の入力(Sheet1)

要は、コンボボックスの「入力範囲」をINDEX()の第1引数、「リンクするセル」をINDEX()の第2引数に指定すればよい訳だ。これで、選択した項目をそのままセルに表示できるようになる。

コンボボックスと連動したデータの表示

選択したデータに応じた計算処理

選択した項目をそのままデータとして表示させるだけでは芸がないので、選択した項目に応じて計算を変化させる方法も紹介しておこう。今回の例では、コンボボックスの参照元となる表に価格データも入力されている。これらの数値を関数INDEX()で取得して、様々な計算に活用することも可能だ。

参照元となるデータ(Sheet2)

各項目に関連するデータを取得するときは、そのセル範囲を関数INDEX()の第1引数に指定すればよい。今回の例の場合、「Sheet2」のC3~C6セルが「参照元となるセル範囲」に該当する。第2引数には、コンボボックスで「何番目の項目が選択されたか?」を示すE5セルを指定する。

これで「選択した項目」の価格データを取得できる。あとは数式を使って自由に計算を行うだけだ。今回の例の場合、取得した価格に「人数」(C4セル)を掛け算すればよいので、その数式は以下の図のようになる。

関数INDEX()を使った数式の入力

これで、選択した「料理」について参加人数分の料金を計算できる。試しに「料理」のコンボボックスで別の項目を選択してみると、選択した項目に応じて金額が変化するのを確認できるはずだ。

コンボボックスと連動した計算処理

もちろん、これまでに解説してきた手順を繰り返して、複数のコンボボックスを設置することも可能だ。今回の例では、「料理」「ドリンク」「会員割引」を一覧から選択できるように3つのコンボボックスを設置した。

コンボボックスを3つ設置したワークシート

いずれも関数INDEX()を利用することで、「選択した項目」をそのままデータとして表示したり、関連する計算を行ったりしている。

なお、E5~E7のセルにはコンボボックスで「何番目の項目が選択されたか?」を示す数字が表示されているが、この表示はなくても構わない。これらの数字を非表示にしたい場合は、E5~E7のセル範囲に「文字色:白」の書式を指定すればよい。これは前回の連載でも紹介したテクニックと同じである。

このようにコンボボックスを利用することで、簡易リレーショナルデータベースのような仕組みを構築することも可能である。同様の仕組みは関数VLOOKUP()でも実現できるが、一覧から項目を選択するだけで利用できるコンボボックスの方が利便性は高いといえる。使い方次第で便利に活用できるので、気なる人は一度動作を確認しておくとよいだろう。