エクセルでプルダウンリストを使っているとき、こういう場面ありませんか?

二つ目のプルダウンリストで、一つ目に選択した項目と関係ないものがいっぱいでてくる!
見にくい!分かりにくい!
とか

複数回答してもらいたいんだけど、フリーにすると集計が面倒だしな~。。。
かといって、何個もプルダウンリストを作るのも大変だし。。。
など。
そのお悩み、プルダウンリストを工夫することで解決できます!
この記事では、
・Excelで連動型プルダウンを作成する手順
・複数項目を選べる応用VBAの使い方
を紹介します。
仕事の効率化にもつながること間違いなし!なテクニックを紹介します。
ぜひ最後まで読んでいただけると嬉しいです!
プルダウンリストとは?基本の使い方

プルダウンリストってなんぞや?
と思われた方もいらっしゃるかもしれません。
これはExcelの便利な機能で、
セルを選択するとあらかじめ用意された選択肢が表示され、その中から選べる機能
です。
例えば、
・「はい/いいえ」
・「営業部/総務部/経理部」
などあらかじめ使う選択肢をリストにしておくことで、入力の手間を減らしたり、入力ミスを防ぐことができます。
基本的な作成手順
プルダウンリストの基本的な作成方法を紹介します。
プルダウンリスト自体は簡単に作れますので、様々な場面で活躍します。
今回は、A2~A5にある項目を、セルH2にプルダウンリストで表示させます。

■プルダウンリストの作成手順
・プルダウンリストを表示したいセルを選択し、「データ」→「データの入力規則」を選択

・「入力値の種類」で「リスト」を選択、「元の値」でリスト化したい項目を入力し、「OK」を選択
※今回はA2~A5の項目を表示させるため、その範囲(=$A$2:$A$5)を入力

結果、セルH2にプルダウンリストが表示されました!

このようにプルダウンリストが作れると、定型文言を選択するだけなので非常に便利です。
【連動型】選択肢を絞れるプルダウンリストの作成方法
連動型プルダウンリストとは、
最初に選んだ項目に応じて、次の選択肢が自動的に変わるリストのこと
です。
例えば、最初に「果物」や「野菜」などのカテゴリを選ぶと、次に表示されるアイテムリスト(りんご、バナナ、トマト、キャベツなど)がそのカテゴリに合わせて絞られる仕組みです。
では、実際に連動型プルダウンリストを作ってみたいと思います!
セルH2で「カテゴリ」を選択した場合、それぞれの項目を表示するプルダウンリストを作成します。
・「果物」を選択 :「リンゴ」、「バナナ」、「ブドウ」、「モモ」
・「野菜」を選択 :「ニンジン」、「タマネギ」、「キャベツ」、「キュウリ」、「トマト」
・「飲み物」を選択 :「ミルク」、「烏龍茶」、「コーヒー」、「紅茶」
・「アルコール」を選択:「ビール」、「ワイン」、「焼酎」
先に作成したプルダウンリストの項目に合わせたリストを作っていきたいと思います。
・「数式」タブより、「名前の管理」を選択
↓
・「名前の管理」画面が出てくるので、「新規作成」を選択

・「新しい名前」画面が出てくるので、「名前」に「果物」と入力し、「参照範囲」にリスト化したい範囲を選択し、「OK」を選択
※今回はプルダウンシートのB2~B5に表示させたい項目を記載しているため、その範囲を選択しています。

・「果物」に対応する項目の設定ができました!
↓
・同じように「野菜」、「飲み物」、「アルコール」も作成し、「閉じる」を選択

・プルダウンリストを作成したいセルを選択し、「データの入力規則」を選択
↓
・「入力値の種類」で「リスト」を選択、「元の値」で「=indirect($H$2)」を入力、「OK」を選択
※今回はH2セルに一つ目のプルダウンリストを作成しているため、作成しているファイルで適宜変更してください。

結果、一つ目の項目に連動したプルダウンリストを作成することができました!
一つ目のプルダウンで「野菜」を選択すると、
→「ニンジン」、「タマネギ」、「キャベツ」、「キュウリ」、「トマト」
と、野菜カテゴリに紐づいた項目のみ表示されました!

★ここがポイント
連動プルダウンリストを作るには、「名前の定義」と「INDIRECT関数」がカギ!
この2つを理解すれば、様々な応用ができるようになります。
<補足>INDIRECT関数って何?連動に使える関数を解説

ん?いきなり「INDIRECT」って出てきたけど、何を言っているんだい?
と、思われた方もいらっしゃると思います。
唐突に説明し、混乱された場合、すみません!!
INDIRECT関数とは、
セルのアドレスを文字として使って、その場所にあるデータを取り出す関数
です。
少しわかりにくいと思いますので、以下でイメージを紹介します!
例えばINDIRECT関数で「B1」とした場合、そのセルに「B2」と記載があれば、セルB2に表示されている内容を表示します。
=INDIRECT(B1)
などセルを指定してあげると、そのセルに入力されているセル番地を取得して、そのセル番地の値を返してくれます。

またこの関数の便利なところは、別シートのセル入力値も取得できることです。
別シートのセル入力したい場合、
=INDIRECT("シート名!B1")
と、対象シートとセル番地を文字列で指定してあげると取得することができます。
※シート名のあとに、「!」を入力するのを忘れずに!
以下のように、セルにあらかじめシート名とセル番地を入力している場合、それを参照することも可能です。

【応用編】複数選択できるプルダウンリストをVBAで実現
エクセルのプルダウンリストは、標準では一つの項目しか選択できません。
例えばアンケートをとるときなど、

複数回答してもらいたいんだけど、フリーにすると集計が面倒だしな~。。。
かといって、何個もプルダウンリストを作るのも大変だし。。。
と思うことあると思います。
しかし!VBAを使うことで、なんと複数選択することが可能になります!
アンケートの集計やカテゴリ選択など、複数選択できると便利なシーンに活用したい方法です!
こちらの設定方法も紹介します!
プルダウンのリストを作る
まずはプルダウンに表示するリストを作ります。
今回は「プルダウンリスト」シートのセルA1~A6で、果物一覧を記載しました。
こちらのリストを作成し、複数選択できるように設定していきます。

プルダウンリストが表示されるよう設定する
次に、プルダウンリストを表示するよう設定します。
・プルダウンリストを表示したい部分を選択
↓
・「入力値の種類」→リスト、「元の値」→プルダウンを表示させたい範囲を入力
※今回は、プルダウンシートのセルA1~A6を入力

ここまでは、基本的なプルダウンの作り方と同じです。
プルダウンを複数選択できるVBAを設定する
通常のプルダウンでは複数選択はできないため、VBAを設定します。
「開発」タブより、「Visual Basic」を選択します。

プルダウンリストを表示させるシートを選択します。
今回は「プルダウン_複数」シートを選択します。

表示するシートを選択し、コードウィンドウに以下VBAコードを記載します。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngDropdown As Range
Dim oldVal As String
Dim newVal As String
' ドロップダウンがある範囲を指定(今回はB2:B3)※必要に応じて修正してください!
Set rngDropdown = Range("B2:B3")
' 対象セルに変更があった場合
If Not Intersect(Target, rngDropdown) Is Nothing Then
'新たなイベント発生を停止する
Application.EnableEvents = False
newVal = Target.Value
Application.Undo ' 直前の値に戻す
oldVal = Target.Value
' 既存の値が空ならそのまま反映
If oldVal = "" Then
Target.Value = newVal
Else
' 既に同じ値が含まれていたら削除
If InStr(1, oldVal, newVal) > 0 Then
Target.Value = Replace(oldVal, newVal & ", ", "")
Target.Value = Replace(Target.Value, ", ,", ",") ' 余分なカンマ修正
Target.Value = Trim(Replace(Target.Value, ", ", ",")) ' スペース整理
Else
'同じ値でなければ追加
Target.Value = oldVal & ", " & newVal
End If
End If
'新たなイベントが発生するように設定する
Application.EnableEvents = True
End If
End Sub
上記VBAコードを保存して、先ほどのプルダウンを選択すると・・・

このように、複数項目を選択することができました!
まとめ:連動&複数選択でExcel作業をもっと快適に!
Excelのプルダウンリストは、入力ミスを防ぎ、作業の効率化に非常に役立ちます
今回紹介した「連動型プルダウン」や「複数選択が可能なVBA」は、実務でのデータ入力や帳票作成などにぴったりのテクニックです。
ぜひこの記事を参考に、Excel作業の効率アップをしていきましょう!
この記事が役に立ったと思った場合、ブックマークやシェアしてもらえると嬉しいです。
また、質問やこんな方法を紹介してほしい!などありましたら、お気軽にコメントしてください。
最後まで読んでいただき、ありがとうございました!
コメント