ワークシート上でリストボックスを使うには次のようにします。
リボンに[開発]タブが表示されていないときは、次のようにして、[開発]タブが表示されるようにします。
(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で調べるしか手はなく、ワークシート関数で判定することはできません。ちょっと詳しく書いたら、思いの外に長くなってしまいました(^^;ワークシート上でリストを表示するには、ほかにも方法があります。詳しくは「ワークシート上でリスト入力」をご覧ください。