PR

Excelのプルダウンリストで複数選択する方法|VBAをコピペするだけ

Excel
記事内に広告が含まれています。

Excelのプルダウンリストは便利ですが、標準機能では1つしか選択できません。

例えば、

・アンケートで複数回答してもらいたい
・保有資格をまとめて登録したい
・対応可能な業務を複数選択したい

という場面でも、後から選んだ項目で上書きされてしまいます。

この記事ではVBAを使って、プルダウンリストから複数項目を選択できるようにする方法を図解付きで解説します。

Excelのプルダウンは標準では複数選択できない

Excelのプルダウンリスト(入力規則)は、入力ミスを防いだり、選択肢を統一したりできる便利な機能です。
しかし、標準機能のままでは1つのセルに対して1つの項目しか選択できません。

例えば、次のようなケースを考えてみましょう。

  • 好きな果物を選択してもらうアンケート
  • 保有資格の管理表
  • 対応可能な業務一覧
  • 商品カテゴリの登録

このような場面では、

リンゴ,バナナ,ブドウ

のように複数の項目を選択したいことがあります。

ところが、通常のプルダウンリストでは、
1回目に「リンゴ」を選択 → 2回目に「バナナ」を選択 → 「リンゴ」が消えて「バナナ」に置き換わる
という動作になります。

つまり、後から選択した内容で上書きされてしまうため、複数の選択肢を保持することができません。

なぜ複数選択できないのか?

Excelの入力規則は、本来「セルに入力する値を制限する機能」として作られています。

そのため、

  • 選択肢の中から1つ選ぶ
  • 入力ミスを防ぐ
  • データを統一する

ことを目的としており、複数選択する仕組みは用意されていません。

VBAを使えば複数選択が可能

ただし、VBA(マクロ)を利用することで、

  • 選択した内容を自動で追記する
  • 同じ項目を再度選択すると解除する
  • カンマ区切りや改行区切りで保存する

といった動作を実現できます。

例えば、

リンゴ

を選択した後に、

バナナ

を選択すると、

リンゴ, バナナ

のように自動で追加できるようになります。

次の章から、実際にプルダウンリストを作成し、複数選択できるようにする設定方法を解説していきます。

完成イメージ

まずはどのような完成イメージとなるかを紹介します。

以下は完成イメージの動画となります。
ご覧の通り、プルダウンから複数項目を選択できていることが確認できます。

複数選択プルダウンの活用例

複数選択プルダウンは、次のような場面で活用できます。

・アンケートの趣味調査
・保有資格の管理
・対応可能な業務の登録
・商品カテゴリの管理
・スキル管理表

フリーワード入力にすると表記ゆれが発生しますが、プルダウンを利用すると入力内容を統一できるため、集計や分析がしやすくなります。

プルダウンリストを作る

まずはプルダウンに表示するリストを作ります。
今回は「プルダウンリスト」シートのセルA1~A6で、果物一覧を記載しました。
こちらのリストを作成し、複数選択できるように設定していきます。

次に、プルダウンリストを表示するよう設定します。
プルダウンリストについては、「データの入力規則」からリスト選択すればOKです。

「入力値の種類」から「リスト」、「元の値」を「プルダウンリスト」シートのセルA1~A6で指定します。

VBAを設定する

冒頭にも説明したとおり、通常はプルダウンから複数選択はできません。
しかし、VBAを設定することにより、プルダウンから複数選択することができます。

以下の流れでVBAを設定します。

1.「開発」タブより、「Visual Basic」を選択

💡ポイント
  • 「Alt」+「F11」キーでも、Visual Basic画面を開くことができます。

2.プルダウンリストを表示させるシートを選択(今回は「プルダウン_複数」シートを選択)

ここにVBAを貼ることで、プルダウンリストから複数項目を選択できるようになります。

VBAコード全文(コピペ用)

実際に貼るVBAを紹介します。
以下のVBAをコピペしてもらえればOKです。

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の対象セルを変更する方法

今回紹介したVBAでは、以下の部分で複数選択を有効にするセル範囲を指定しています。

Set rngDropdown = Range("B2:B3")

この設定の場合、B2~B3のセルだけが複数選択に対応します。

例えば、

  • B2~B10まで対応したい場合
Set rngDropdown = Range("B2:B10")
  • B列全体に対応したい場合
Set rngDropdown = Range("B:B")

のように変更できます。

プルダウンを設定するセルが増えた場合は、この部分を修正するだけで対応可能です。

なお、列全体(B列など)を指定すると処理対象が増えるため、データ量が多い場合は必要な範囲だけ指定することをおすすめします。

同じ項目を選んだら解除する仕組み

今回紹介したVBAには便利な機能があります。

それは、すでに選択済みの項目を再度選ぶと解除できることです。

例えば、

リンゴ, バナナ, ブドウ

が選択されている状態で、もう一度「バナナ」を選択すると、

リンゴ, ブドウ

になります。

通常のプルダウンリストではこのような動作はできませんが、今回のVBAでは以下のコードによって実現しています。

If InStr(1, oldVal, newVal) > 0 Then

この処理で、「すでに選択済みか?」を判定しています。

アンケートやチェックリストなどでは、「間違えて選択した項目を消したい」というケースも多いため、実務では非常に便利な仕組みです。

特別な操作は不要で、もう一度同じ項目を選択するだけで解除できます。

プルダウンの複数選択がうまく動かない原因

VBAを設定したのにうまく動かない場合は、以下のポイントを確認してみてください。

ファイル形式が「.xlsx」になっている

VBAを保存する場合は、「.xlsm」形式で保存する必要があります。

「.xlsx」形式ではマクロが保存されないため、ブックを閉じた時点でVBAが消えてしまいます。

保存時に、「Excel マクロ有効ブック(*.xlsm)」を選択してください。

マクロが無効になっている

Excelではセキュリティ上の理由から、マクロが無効になっている場合があります。

ファイルを開いた際に、

「コンテンツの有効化」

というメッセージが表示された場合は、有効化を選択してください。

標準モジュールに貼り付けている

今回のコードは標準モジュールでは動きません。

必ず、

・対象シート → 右クリック → コードの表示

から開いたシートモジュールへ貼り付けてください。

対象セル範囲が間違っている

VBAでは以下の範囲だけが対象になります。

Set rngDropdown = Range("B2:B3")

プルダウンを設定したセルと異なる場合は動作しません。

実際にプルダウンを設定したセル範囲と一致しているか確認しましょう。

Excel Onlineでは利用できない

Excel Online(ブラウザ版Excel)ではVBAは実行できません。

この機能を利用する場合は、

  • Excelデスクトップ版
  • Microsoft 365アプリ版

を使用してください。

改行区切り版に変更する方法

今回のVBAでは、選択した項目をカンマ区切りで表示しています。

例:

リンゴ, バナナ, ブドウ

しかし、

リンゴ
バナナ
ブドウ

のように改行表示したい場合もあります。

その場合は、以下の部分を修正します。

変更前

Target.Value = oldVal & ", " & newVal

変更後

Target.Value = oldVal & vbLf & newVal

さらに、セルの書式設定で「折り返して全体を表示する」を有効にすると、複数行で表示されるようになります。

改行区切りにすると一覧性が高くなるため、

  • アンケート結果
  • 保有資格一覧
  • 対応可能業務

などを管理する際におすすめです。

FAQ(よくある質問)

VBAを使わずに複数選択できますか?

標準機能のプルダウンリストでは複数選択できません。
複数選択を実現するにはVBAを利用する方法が一般的です。

Microsoft 365でも使えますか?

はい。Microsoft 365版Excelでも利用できます。
ただし、ブラウザ版Excel OnlineではVBAは動作しません。

複数選択した内容を集計できますか?

可能です。
TEXTSPLIT関数やPower Queryを活用すると、複数選択されたデータを分解して集計できます。
アンケート分析やデータ集計にも活用できます。

👉TEXTSPLITに関しては、以下記事で詳しく解説しています。ぜひチェックしてみてください。

プルダウンで選択した項目数を数えることはできますか?

可能です。
カンマ区切りで保存している場合、

=LEN(A1)-LEN(SUBSTITUTE(A1,",",""))+1

で選択項目数を求めることができます。

プルダウンリストを連動させながら複数選択できますか?

可能ですが、VBAの追加カスタマイズが必要になります。
設定が複雑になるため、まずは通常の連動プルダウンと複数選択を別々に作成し、動作確認してから組み合わせることをおすすめします。

共有ファイルでも使えますか?

Excelデスクトップ版であれば利用できます。
ただし、共同編集時はマクロの動作に制限がかかる場合があるため、事前に動作確認を行うことをおすすめします。

まとめ:プルダウンの複数選択で入力作業をもっと効率化しよう

Excelの標準機能では、プルダウンリストから選択できる項目は1つだけです。

しかし、今回紹介したVBAを設定することで、

  • プルダウンから複数項目を選択できる
  • 選択した内容を自動で追記できる
  • 同じ項目を再度選択すると解除できる
  • カンマ区切りや改行区切りで管理できる

ようになります。

特に、

  • アンケートの回答管理
  • 保有資格の登録
  • 対応可能業務の登録
  • 希望条件の選択
  • 商品カテゴリの管理

など、複数の項目を選択する機会が多い業務では非常に便利です。

また、プルダウンリストを活用することで入力ミスを防ぎながらデータを統一できるため、その後の集計や分析も行いやすくなります。

最初はVBAと聞くと難しく感じるかもしれませんが、今回のコードはコピー&ペーストで利用できるため、初心者の方でも比較的簡単に導入できます。

ぜひ実際の業務やデータ管理に取り入れて、Excel作業の効率化に役立ててみてください。

なお、プルダウンリストの選択肢を連動させたい場合は、以下の記事も参考にしてみてください。

ろじゃー

仕事・子育てに奮闘中の社会人です。
仕事でも日常生活でも、ちょっとでも便利になることが紹介できるブログを書いています!
 
仕事柄、PC操作やエクセル、VBAなどは得意です!
Excel歴は10年以上の事務職。
関数やVBAを活用して、資料作成やデータ分析をはじめとした様々な業務の効率化・自動化に取り組んできました。
 
このブログでは、実際の業務で使える効率化テクニックを発信しています。
「わからない」や「困った」など問題を抱える方や、もっと効率化したいと思っている方に、少しでも役立てれば幸いです!

ご質問・ご相談など、お気軽にご連絡ください。

🥷 「現代で暮らすゆる忍者」ラインスタンプシリーズ公開中!日常や仕事、夫婦の会話など様々なシーンを製作しています
▶ LINEスタンプ一覧はこちら

ろじゃーをフォローする
ご質問・ご相談はこちらへ!
 ろじゃー|日々、ちょっとずつ良くなることを目指すブロガー
Excel歴10年以上。VBAや関数、業務効率化などを発信中。
📩 お問い合わせはこちら
Excel
シェアする
ろじゃーをフォローする

コメント

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