Excelの入力規則で作成したプルダウンリストは、通常では1つのセルに1項目しか選択できません。
しかし、VBAを設定すれば、同じセル内へ複数の選択肢を順番に追加し、たとえば「営業部、開発部、総務部」のように記録できます。
アンケートの回答、担当者の割り当て、複数カテゴリの管理などで便利な方法です。
この記事では、Excelのプルダウンで複数選択する方法、入力規則の設定、VBAコード、解除方法、うまく動かない場合の確認点まで解説します。
複数選択のポイントは、入力規則で候補を作成し、対象シートのイベントマクロで選択結果を既存の値へ追加することです。
入力規則だけでは複数選択はできないため、VBAの設定が必要です。
なお、マクロを含むブックはExcelマクロ有効ブックとして保存する必要があります。
それでは詳しく見ていきましょう。
エクセルのプルダウンで複数選択する方法【VBAで選択値を追加】
それではまず、プルダウンの選択肢を同じセルへ追加する基本設定について解説していきます。
| A | B | C |
|---|---|---|
| 1 | 担当業務 | 選択結果 |
| 2 | 田中 | 営業、開発 |
| 3 | 佐藤 |
上の例では、C列のセルをクリックして候補から営業を選び、再度セルをクリックして開発を選ぶと、C2セルに営業、開発と並べて表示するイメージです。
複数選択の対象になるセル範囲を、コード内で正しく指定することが重要です。
入力規則によるプルダウンリストの作成
まずは複数選択の土台となるプルダウンリストを作成します。
たとえば、別の場所に営業、開発、総務、人事という候補を縦方向に入力しておきます。
候補リストは同じシートでも別シートでも構いませんが、後で編集しやすい場所にまとめると便利です。
複数選択を使いたいセル範囲を選択し、Excel上部のデータタブを開きます。
データツールグループにあるデータの入力規則をクリックしてください。
設定タブの入力値の種類でリストを選び、元の値へ候補範囲を指定します。
候補がH2からH5にある場合は、元の値に=$H$2:$H$5と入力します。
サンプルデータで1行目をヘッダーにする場合、C2:C100を選択して入力規則を設定すると、2行目以降の担当業務欄に同じ候補を表示できます。
候補セルの範囲は絶対参照で指定しておくと、コピーや編集時のずれを防ぎやすくなります。
OKをクリックすると、対象セルの右側に小さな下向き矢印が表示されます。
この時点ではまだ選択値を上書きする通常のプルダウンですが、次のVBA設定で複数選択へ変わります。
ワークシートイベントへ貼り付けるVBAコード
プルダウンの選択値を追加するには、対象となるワークシートのコード画面へVBAを貼り付けます。
Altキーを押しながらF11キーを押すと、Visual Basic Editorが開きます。
左側のプロジェクトエクスプローラーから、対象ブック内のMicrosoft Excel Objectsを探してください。
複数選択を設定したいシート名をダブルクリックし、表示された白いコード画面へ次のコードを貼り付けます。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim oldValue As String
Dim newValue As String
If Intersect(Target, Range("C2:C100")) Is Nothing Then Exit Sub
On Error GoTo ExitHandler
Application.EnableEvents = False
newValue = Target.Value
Application.Undo
oldValue = Target.Value
If oldValue = "" Then
Target.Value = newValue
ElseIf InStr(1, oldValue, newValue, vbTextCompare) = 0 Then
Target.Value = oldValue & "、" & newValue
Else
Target.Value = oldValue
End If
ExitHandler:
Application.EnableEvents = True
End Sub
このコードのC2:C100は、プルダウンで複数選択したいセルの範囲です。
実際の表でD列を使うならD2:D100へ、入力欄が5行目からならC5:C100へ変更しましょう。
標準モジュールではなく、対象ワークシートのコード画面に貼り付ける点が大切です。
標準モジュールに貼り付けると、セルを変更してもWorksheet_Changeイベントが自動実行されません。
マクロ有効ブックとして保存する手順
VBAコードを貼り付けた後は、通常のxlsx形式ではなく、マクロを保持できる形式で保存します。
ファイルタブから名前を付けて保存を選択し、ファイルの種類でExcelマクロ有効ブックを指定してください。
拡張子はxlsmになります。
xlsx形式で保存すると、VBAプロジェクトを保存できないという警告が表示され、コードが失われる可能性があります。
複数選択を継続して使うなら、必ずxlsm形式で保存しましょう。
保存後にブックを閉じ、もう一度開いたときにセキュリティ警告が出た場合は、信頼できるファイルであることを確認してからコンテンツの有効化を選びます。
【操作のポイント】対象範囲をC2:C100以外へ変更した場合は、入力規則を設定した範囲とVBAコード内の範囲を必ず一致させます。
入力規則の候補と複数選択の操作手順
続いては、作成したプルダウンを実際に操作する流れと、選択結果の見え方を確認していきます。
| A | B | C |
|---|---|---|
| 1 | 氏名 | 担当部署 |
| 2 | 田中 | 営業、開発、総務 |
| 3 | 鈴木 | 人事 |
コードでは、最初に選んだ候補を記録し、2回目以降に選んだ候補を読点で区切って末尾へ追加します。
同じ候補をもう一度選んだ場合は、重複して追加しない設定です。
セルをクリックして候補を順番に選ぶ操作
対象セルを選ぶと、セルの右端にプルダウン矢印が表示されます。
矢印をクリックし、最初の候補として営業を選択します。
セルには営業と表示されます。
同じセルをもう一度選択して、今度は開発を選んでください。
VBAが既存の営業を読み取り、新しい選択値である開発を追加します。
結果として、セルには営業、開発と表示されます。
キーボードで候補を直接入力するのではなく、リストから選ぶことで表記ゆれを抑えられます。
候補を追加する回数に基本的な上限はありませんが、セル内の文字数が増えすぎると一覧性は下がります。
多くの候補を管理する場合は、別表で担当内容を1行ずつ持たせる方法も検討しましょう。
Excel画面を模した複数選択のイメージ
ここでは、C2セルで営業を選択した後、再度プルダウンを開いて開発を追加する操作を確認していきます。
赤枠のC2セルが操作対象です。
表示済みの営業を消さずに、リスト内の開発を選択すると、VBAが営業、開発という文字列へ更新します。
赤枠で囲まれたデータの入力規則は、候補リストの設定場所を示しています。
区切り文字とセル内表示の調整
サンプルコードでは、選択値の間に日本語の読点である、を入れています。
社内のルールに合わせて、半角カンマ、スラッシュ、改行などへ変更することも可能です。
たとえば半角カンマへ変える場合は、コード内の「、」を「, 」へ書き換えます。
区切り文字の変更例です。
Target.Value = oldValue & “, ” & newValue
セル内で改行して表示したい場合は、区切り文字をvbLfへ変更し、セルの書式設定で折り返して全体を表示するを有効にします。
改行区切りは見やすい反面、フィルターやCSV出力では扱いに注意が必要です。
横幅が狭い列では、ホームタブの折り返して全体を表示するを使うと、複数の候補がセルの中で読みやすくなります。
【操作のポイント】区切り文字は後から一括置換できますが、検索や集計にも影響するため、運用開始前に表記ルールを決めておきましょう。
複数選択のVBAコードと処理の仕組み
続いては、VBAコードがどのように以前の値と新しい値を結合するのか確認していきます。
| 操作回数 | 選んだ候補 | セルの結果 |
|---|---|---|
| 1回目 | 営業 | 営業 |
| 2回目 | 開発 | 営業、開発 |
| 3回目 | 総務 | 営業、開発、総務 |
Worksheet_Changeは、ワークシート内のセル内容が変更された時点で動くイベントプロシージャです。
プルダウンから候補を選んだときもセルの変更として扱われるため、この仕組みを利用できます。
TargetとIntersectによる対象セルの判定
VBAのTargetは、変更されたセルを示すオブジェクトです。
たとえばC2セルで候補を選択した場合、TargetはC2を表します。
Intersectは、変更セルと指定範囲が重なっているかを判定するために使います。
コード内のIf Intersect(Target, Range(“C2:C100”)) Is Nothing Then Exit Subは、変更した場所がC2からC100の範囲外なら処理を終了するという意味です。
これにより、氏名欄や日付欄を編集しても複数選択の処理が動きません。
対象範囲を限定することで、意図しないセルの内容を書き換える事故を防げます。
複数の離れた範囲で使いたい場合は、Range(“C2:C100,E2:E100”)のように指定できます。
ただし、複数の列で候補や区切り方が異なる場合は、それぞれに合った条件分岐を追加するほうが安全です。
Undoで以前の値を取得する理由
プルダウンから開発を選んだ直後、Excelのセル内容は一度開発だけに置き換わります。
そのままでは、前に入っていた営業という値を取得できません。
そこでApplication.Undoを実行し、直前の状態へ一度戻して以前の値を読み取ります。
oldValueへ営業を保存した後、newValueとして記憶していた開発を末尾へ追加する流れです。
処理の流れは、新しい選択値を保存する、Undoで元の表示に戻す、元の表示を取得する、元の値と新しい値を連結する、という順番です。
この順序が崩れると、前の選択値が消えたり、セルが空白になったりすることがあります。
Application.Undoを使う方式では、複数セルをまとめて貼り付けた場合などに想定外の動きをする可能性があります。
複数選択用の範囲には、できるだけ通常の入力や一括貼り付けを行わない運用が向いています。
重複選択を防ぐInStr関数の役割
InStr関数は、文字列の中に指定した文字が含まれているかを調べる関数です。
コードでは、既存の値oldValueに新しい候補newValueが含まれるかを確認しています。
すでに営業が入っているセルで営業をもう一度選んでも、営業、営業とは追加しません。
重複を防ぐ設定は、候補数が多いリストほど役立ちます。
ただし、候補に営業企画と営業のように似た文字列がある場合、単純なInStrでは意図せず重複と判定することがあります。
候補名が部分一致する運用では、区切り文字を含めて厳密に判定するコードへ調整する方法があります。
まずは候補の名称を重複しにくい形に整理し、必要に応じてVBAを拡張しましょう。
【操作のポイント】プルダウン候補は短く明確な名称にそろえると、重複判定、検索、集計のすべてが安定します。
複数選択したプルダウンの解除と編集
続いては、追加済みの候補を削除したい場合や、通常のプルダウンへ戻したい場合を確認していきます。
| A | B | C |
|---|---|---|
| 1 | 氏名 | 選択内容 |
| 2 | 田中 | 営業、開発、総務 |
複数選択した内容は、セル内では1つの文字列として扱われます。
そのため、候補を1つだけ消す操作と、セル全体を空白にする操作では手順が異なります。
セル全体を空白にして選択をやり直す方法
いったん選択内容をすべて消すなら、対象セルを選択してDeleteキーを押します。
セルが空白になれば、次回のプルダウン選択は新しい1項目目として保存されます。
営業、開発、総務をすべて消してから人事を選ぶと、結果は人事だけになります。
セル全体を消去する方法は、選択内容を最初から作り直したいときに最も簡単です。
DeleteキーではなくBackspaceキーを使うと、セル編集モードになることがあります。
複数選択の結果を丸ごと消すなら、セルを1回クリックしてからDeleteキーを使うと確実です。
選択済みの項目を1つだけ削除する方法
営業、開発、総務から開発だけを消したい場合は、セルをダブルクリックするかF2キーを押して編集モードにします。
文字列の中から開発と、その前後にある区切り文字を削除してください。
残る文字列が営業、総務となれば編集完了です。
セル内の文字を手動編集するときは、不要な読点や連続した空白が残らないように確認しましょう。
削除前の表示が営業、開発、総務なら、開発、の部分を削除することで営業、総務にできます。
先頭または末尾の項目を消す場合は、区切り文字が1つだけ残らないように注意が必要です。
候補を頻繁に個別削除する運用では、セル内の文字列方式より、チェックボックス付きのユーザーフォームや別表での管理が向くこともあります。
VBAと入力規則を解除する方法
複数選択そのものをやめる場合は、VBAコードと入力規則を別々に解除します。
まずAltキーとF11キーでVisual Basic Editorを開き、対象シートのコード画面にあるWorksheet_Changeのコードを削除します。
コードを削除せずに通常のセル入力へ戻すと、対象範囲内の変更時にイベント処理が残り続けます。
次に、プルダウンをなくしたいセル範囲を選択し、データタブからデータの入力規則を開きます。
すべてクリアを選択してOKをクリックすると、リスト形式の入力規則が解除されます。
VBAだけを削除すれば通常の単一選択プルダウンとして残せます。
マクロを含まない通常のExcelブックへ戻す場合は、必要なコードを削除した後にxlsx形式で保存してください。
【操作のポイント】VBAを削除する前に、元のxlsmファイルを複製しておくと、後で複数選択の設定を復元したくなった場合も安心です。
複数選択ができない場合の確認項目
続いては、プルダウンで複数選択できない場合に確認したい原因と対処法を確認していきます。
| 症状 | 主な確認点 |
|---|---|
| 選択値が上書きされる | VBAの貼り付け先とマクロの有効化 |
| 一部のセルだけ動かない | Rangeの対象範囲 |
| コード実行時にエラーになる | イベント設定とセル結合の有無 |
複数選択用のVBAは短いコードですが、保存形式、貼り付け場所、セキュリティ設定の影響を受けます。
順番に確認すれば、多くの問題は解消できます。
マクロが無効になっている場合
最も多い原因は、ブックを開いたときにマクロが有効になっていないことです。
VBAコードが正しく入っていても、マクロが無効ならプルダウンは通常どおり選択値を上書きします。
Excel上部にセキュリティの警告バーが表示されている場合は、ファイルの安全性を確認してからコンテンツの有効化をクリックします。
会社のパソコンでは、組織のセキュリティポリシーによりマクロが制限されている場合もあります。
不明な送信元から受け取ったxlsmファイルでは、安易にマクロを有効化しないでください。
信頼できる自分のファイルであれば、保存場所やトラストセンターの設定も確認します。
コードの貼り付け先が異なる場合
Worksheet_Changeのコードは、複数選択を使うワークシートに貼り付ける必要があります。
Module1などの標準モジュールへ貼り付けた場合、セル変更をきっかけに処理が始まりません。
VBEの左側でSheet1、Sheet2などの名前を確認し、入力規則を設定したシートと同じ場所へコードを入れます。
シート名を変更している場合でも、タブに表示される名前とVBE上のコードネームを見間違えないように注意しましょう。
複数選択を設定したシートが売上一覧なら、売上一覧のシートオブジェクトをダブルクリックしてコードを貼り付けます。
ThisWorkbookはブック全体のイベント用であり、今回の基本コードの貼り付け先とは異なります。
コードを移動した後は、Excelへ戻って対象セルを選び直し、追加動作をテストしてください。
対象範囲と入力規則の設定ずれ
プルダウンがC2:C50にあるのに、VBAがC2:C100以外を指定している場合は、範囲外のセルで複数選択が動きません。
また、入力規則を新しい行までコピーしたのに、VBA側の範囲を広げていないケースもよくあります。
表を増やす予定があるなら、あらかじめ余裕を持ってC2:C1000のように設定する方法があります。
ただし、同じ列の下部で別用途の入力を行う場合は、範囲を広げすぎないほうが安全です。
入力規則の適用先とRangeの範囲は、セットで確認する習慣を付けましょう。
結合セルはWorksheet_Changeや入力規則の運用を複雑にするため、複数選択の対象には使わないことをおすすめします。
【操作のポイント】動作確認は、対象範囲の先頭行、中間行、末尾行で候補を2回ずつ選ぶと設定漏れを見つけやすくなります。
まとめ エクセルの入力規則でプルダウンを複数選択する方法
| 手順 | 行う内容 |
|---|---|
| 1 | 入力規則のリストで候補を作成 |
| 2 | 対象シートへWorksheet_ChangeのVBAを貼り付け |
| 3 | xlsm形式で保存してマクロを有効化 |
| 4 | 同じセルで候補を順番に選択 |
Excelの入力規則で作成した通常のプルダウンは、選択のたびに既存の値を置き換える仕組みです。
同じセルに複数の項目を追加したい場合は、入力規則に加えてWorksheet_ChangeイベントのVBAを設定します。
基本コードでは、以前の選択値を取得し、新しい候補を読点区切りで追加できます。
最初に確認したい点は、VBAを対象シートへ貼り付け、マクロ有効ブックで保存しているかどうかです。
選択内容をすべて消す場合はDeleteキーでセルを空白にし、1項目だけ消す場合はセルを編集して不要な文字列と区切り文字を削除します。
複数選択のセルは便利ですが、後から集計する場合は1セルに複数の値が入ることを前提に設計する必要があります。
候補の表記と区切り文字を統一し、必要に応じてフィルター、検索、関数で扱いやすい形へ整えていきましょう。