ワークシートでリストボックスを使う


ワークシート上でリストボックスを使うには次のようにします。

コントロールの配置

リボンに[開発]タブが表示されていないときは、次のようにして、[開発]タブが表示されるようにします。

(1)[Office]ボタンをクリックします

(2)右下の[Excelのオプション]ボタンをクリックします

(3)[基本設定]グループの[[開発]タブをリボンに表示する]チェックボックスをオンにします

[開発]タブが表示されたら、[開発]タブを開きます。[コントロール]グループ[挿入]ボタンをクリックして[リストボックス]ボタンをクリックします。

リストボックスを配置したい位置をドラッグすると、リストボックスが配置されます。

リストボックスのデータを登録する

ここからはExcel 2010の画面で解説します。なお、ここでは、下図のように、リストボックスに表示したいデータがA列に入力されているものとします。

まず、挿入したリストボックスを右クリックします。

[コントロールの書式設定]をクリックします。

実行すると[コントロールの書式設定]ダイアログボックスが表示されます。

[入力範囲]ボックス内をクリックしてから、データが入力されているセル範囲A1:A12をドラッグします。実行すると、[入力範囲]ボックスに「$A$1:$A$12」と入力されます。もちろん、このアドレスを手入力してもかまいません。

次に、[リンクするセル]ボックス内をクリックして、任意のセルをクリックします。ここでは、セルB8とします。このセルに「リストボックスで何番目のデータが選択されているか」の数値が入力されます。

[選択の種類]グループで「単一選択」が選択されているのを確認して、[OK]ボタンをクリックします。なお、ここでは[3-D表示]もオンにしました。

[コントロールの書式設定]ダイアログボックスを閉じると、リストボックスが選択状態になっていますので、Escキーを押すか、任意のセルをクリックして選択を解除します。これで準備は完了です。リストボックスでデータを選択すると、[リンクするセル]で設定したセルに「リストボックスで何番目のデータが選択されているか」を表す数値が入力されます。

選択された項目を調べる

[リンクするセル]で設定したセルには「リストボックスで何番目のデータが選択されているか」を表す数値が入力されます。ここから「どの項目が選択されたか」を調べるには関数を使います。いろいろな方法がありますが、たとえば次のようにINDEX関数で取得できます。

ほかにも、いろいろな方法が考えられます。INDIRECT関数を使うのなら

OFFSET関数でもできますね。

下図のように、あらかじめデータの左列に連番を入力しておけば、みんな大好きVLOOKUP関数でも可能です。

元のデータが入力されている範囲は、あらかじめわかっています。そして、リストボックスが「何番目のデータ」かを返してくれるのですから、それが何のデータかを調べるのは簡単です。

応用例と注意事項

上の例では、リストボックスと元データが同じワークシート上にありましたが、もちろん別のワークシートを利用することも可能です。こうすれば「何番目のデータが選択されたか」のセルが見えなくなりますので、レイアウト的にもグッドですね。

(1)Sheet1に、リストボックスに表示する元データを入力しておきます。リストボックスを配置するのはSheet2です

(2)Sheet2のリストボックスに対して、[入力範囲]を「Sheet1!$A$1:$A$7」、「リンクするセル」を「Sheet1!$B$1」とします

(3)Sheet2に配置したリストボックスには、Sheet1の元データが表示されます。また、リストボックスで選択したデータ番号はSheet2のセルB1に入力されます

(4)さて、Sheet2には下図のように適当なデータを入力しておきましょう。これから、このデータを使ってグラフを作ります

(5)グラフに表示するデータを、リストボックスで切り替えられるようにします。こんなときは、元のデータ(ここでは、セル範囲C1:F8)からではなく、別にグラフ用のデータを生成してやるといいです。元データの下に、下図のような数式を入力します。セルC11に「=INDEX(C2:C8,Sheet1!$B$1)」と入力して、右方向にセルF11までコピーしてください

(6)あとは、このグラフ用のデータから好きなグラフを作れば完了です。ここでは円グラフにしてみました

(7)グラフを上に移動して、グラフ用のデータを隠します

(8)リストボックスで選択すると、その月のグラフが表示されます

(9)もう一工夫しましょうか。リストボックスで選択されたデータを、元のリストで強調します。これには条件付き書式を使います。まず、元のリスト全体を選択します。このときアクティブセルがセルC2になるように選択してください。これは、次の条件付き書式を設定するときに重要なポイントになります

(10)Excel 2003までなら[書式]-[条件付き書式]をクリックして[条件付き書式の設定]ダイアログボックスを開き、「数式が」で「=ROW-1=Sheet1$B$1」と設定します。セルの背景色は適当に決めてください

Excel 2007以降でしたら[ホーム]タブ-[条件付き書式]-[新しいルール]をクリックして[新しい書式ルール]ダイアログボックスを開き「数式を使用して、書式設定するセルを決定」を選択します。[次の数式を満たす場合に値を書式設定]ボックスに「=ROW-1=Sheet1$B$1」と設定します。セルの背景色は適当に。

(11)これで、リストボックスで選択されたデータがわかりやすくなりました

さて、最後に重要な注意事項です。ワークシート上に配置したリストボックスでは[複数選択]と[拡張選択]は使えません

設定して、実際に複数の項目を選択することは可能ですが、それを調べる方法がありません。[リンクするセル]には1つの数値しか返らないからです。

[フォーム]ツールバーで提供されるコントロール群は、もともとExcel 5.0/95のダイアログシートで使用するコントロールです。

[複数選択]と[拡張選択]で選択された複数項目は、VBAで調べるしか手はなく、ワークシート関数で判定することはできません。ちょっと詳しく書いたら、思いの外に長くなってしまいました(^^;ワークシート上でリストを表示するには、ほかにも方法があります。詳しくは「ワークシート上でリスト入力」をご覧ください。