エクセルのプルダウンリストを活用しよう!連動するとさらに便利に!

Excel

エクセルを使っていると、「同じシートで何度も繰り返し選択肢を選ばなくてはいけない」という場面、ありませんか?そのようなケースでは、連動型のプルダウンリストで作業がぐんと効率化されます。
今回は、最初に選んだ項目に応じて次の選択肢を絞り込む方法を紹介します。実際に仕事やデータ管理に役立つ方法なので、ぜひ試してみてください!


プルダウンリストについて

プルダウンリストとは?

 →プルダウンリストとは、セルの中に選択肢を表示し、その中から一つを選ぶことができる機能です。項目が決まっている場合で、入力の手間を減らしたり、入力ミスを防ぐことができたりします。

連動型プルダウンリストとは?

 →連動型プルダウンリストとは、最初に選んだ項目に応じて、次の選択肢が自動的に変わるリストのことです。例えば、最初に「果物」や「野菜」などのカテゴリを選ぶと、次に表示されるアイテムリスト(りんご、バナナ、トマト、キャベツなど)がそのカテゴリに合わせて絞られる仕組みです。

連動型プルダウンリストを作るには?

では、実際に連動型プルダウンリストを作ってみたいと思います!
今回選択する項目が分かりやすいように、同じシートに表示される項目を記載しています。

一つ目のプルダウンリストを作成する

まずは一つ目のプルダウンリストを作成します!

 ・プルダウンリストを表示したいセルを選択し、「データ」タブ→「データの入力規則」を選択
  ↓
 ・「入力値の種類」で「リスト」を選択、「元の値」でリスト化したい項目を入力し、「OK」を選択

  ※今回はA2~A5の項目を表示させるため、その範囲(=$A$2:$A$5)を入力
  ↓
 ・入力した項目がプルダウンとして表示されました!

一つ目の項目に連動したプルダウンリストを作成する

次に、一つ目の項目に連動したプルダウンリストを作成します!

今回はサンプルとして、「果物」、「野菜」、「飲み物」、「アルコール」の4カテゴリを準備し、そのカテゴリに紐づく項目を以下のように設定したいと思います。以下は「果物」に紐づくプルダウンリストを作成する内容で記載しています。

 ・「数式」タブより、「名前の管理」を選択
  ↓
 ・「名前の管理」画面が出てくるので、「新規作成」を選択
  ↓
 ・「新しい名前」画面が出てくるので、「名前」に「果物」と入力し、「参照範囲」にリスト化したい範囲を選択し、「OK」を選択

  ※今回はプルダウンシートのB2~B5に表示させたい項目を記載しているため、その範囲を選択しています。
  ↓
 ・「果物」に対応する項目の設定ができました!同じように「野菜」、「飲み物」、「アルコール」も作成し、「閉じる」を選択

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

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

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

複数選択できるプルダウンリストを作るには?

エクセルのプルダウンリストは、標準では一つの項目しか選択できません。
しかし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コードを保存して、先ほどのプルダウンを選択すると・・・

このように、複数項目を選択することができました!

<補足>INDIRECT関数とは?

セルのアドレスを文字として使って、その場所にあるデータを取り出す関数です。例えばINDIRECT関数で指定したセルに「B2」と記載があれば、セルB2に表示されている内容を表示します。
少しわかりにくいと思いますので、以下でイメージを紹介します!

※同シート内のセル入力値を取り出す場合

※以下のようにすると、別シートのセル入力値を取り出すことも可能です!


連動型プルダウンリストを使うことで、選択肢を絞り込んで入力ミスを減らし、効率的に作業を進めることができます
今回の内容が少しでも参考になれば幸いです。
ご覧いただき、ありがとうございました!

コメント

タイトルとURLをコピーしました