Excelのドロップダウンリストで複数の項目を選択する – 完全ガイド
Excelのドロップダウンリストは、データの一貫性を確保し、入力を容易にするための素晴らしいツールです。しかし、デフォルトでは1つの項目しか選択できません。では、同じドロップダウンリストから複数の項目を選択する必要がある場合はどうすればよいでしょうか?この包括的なガイドでは、Excelのドロップダウンリストで複数選択を有効にする方法、重複を管理する方法、カスタム区切り文字を設定する方法、およびこれらのリストの範囲を定義する方法について説明します。
ドロップダウンリストでの複数選択の有効化
このセクションでは、Excelのドロップダウンリストで複数選択を有効にするための2つの方法を提供します。
VBAコードの使用
ドロップダウンリストで複数選択を許可するには、Excelで「Visual Basic for Applications」(VBA)を使用できます。このスクリプトは、ドロップダウンリストの動作を変更して、複数選択リストにします。以下の手順に従ってください。
ステップ 1: シート(コード)エディタを開く
- 複数選択を有効にしたいドロップダウンリストが含まれているワークシートを開きます。
- シートタブを右クリックし、コンテキストメニューから「コードの表示」を選択します。
ステップ 2: VBAコードを使用する
次のVBAコードをコピーして、開いているシート(コード)ウィンドウに貼り付けます。
VBAコード: Excelのドロップダウンリストで複数選択を有効にする
Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 20240118
Dim xRng As Range
Dim xValue1 As String
Dim xValue2 As String
Dim delimiter As String
Dim TargetRange As Range
Set TargetRange = Me.UsedRange ' Users can change target range here
delimiter = ", " ' Users can change the delimiter here
If Target.Count > 1 Or Intersect(Target, TargetRange) Is Nothing Then Exit Sub
On Error Resume Next
Set xRng = TargetRange.SpecialCells(xlCellTypeAllValidation)
If xRng Is Nothing Then Exit Sub
Application.EnableEvents = False
xValue2 = Target.Value
Application.Undo
xValue1 = Target.Value
Target.Value = xValue2
If xValue1 <> "" And xValue2 <> "" Then
If Not (xValue1 = xValue2 Or _
InStr(1, xValue1, delimiter & xValue2) > 0 Or _
InStr(1, xValue1, xValue2 & delimiter) > 0) Then
Target.Value = xValue1 & delimiter & xValue2
Else
Target.Value = xValue1
End If
End If
Application.EnableEvents = True
On Error GoTo 0
End Sub
結果
ワークシートに戻ると、ドロップダウンリストで複数のオプションを選択できるようになります。下記のデモをご覧ください:
上記のVBAコード:
- 現在のワークシート内のすべてのデータ検証ドロップダウンリスト(既存のものと将来作成されるもの)に適用されます。
- 各ドロップダウンリストで同じ項目を複数回選択することを防ぎます。
- 選択した項目の区切り文字としてカンマを使用します。他の区切り文字を使用するには、このセクションを参照して区切り文字を変更してください。
Kutools for Excel を数クリックで使用
VBAに慣れていない場合、より簡単な代替手段は「Kutools for Excel」の「複数選択可能なドロップダウンリスト」機能です。この使いやすいツールは、ドロップダウンリストで複数選択を有効にするプロセスを簡素化し、区切り文字をカスタマイズし、重複を簡単に管理できるようにして、さまざまなニーズに対応します。
Kutools for Excel のインストール後、「Kutools」タブに移動し、「ドロップダウンリスト」>「複数選択可能なドロップダウンリスト」を選択します。その後、次のように設定する必要があります。
- 複数の項目を選択する必要があるドロップダウンリストを含む範囲を指定します。
- ドロップダウンリストセル内で選択した項目の区切り文字を指定します。
- 「OK」をクリックして設定を完了します。
結果
これで、指定した範囲内のドロップダウンリストを持つセルをクリックすると、その横にリストボックスが表示されます。目的の項目の横にある「+」ボタンをクリックして、ドロップダウンセルに追加し、「-」ボタンをクリックして不要になった項目を削除します。下記のデモをご覧ください:
- 区切り文字を挿入後に改行したい場合は、「改行後に区切り記号を挿入」オプションをチェックします。水平方向にリストを表示したい場合は、このオプションをチェックしないでください。
- ドロップダウンリストに検索バーを追加したい場合は、「検索機能を有効にする」オプションをチェックします。
- この機能を使用するには、まず Kutools for Excel をダウンロードしてインストールしてください。
複数選択可能なドロップダウンリストのその他の操作
このセクションでは、データ検証ドロップダウンリストで複数選択を有効にする際に必要なさまざまなシナリオを収集しています。
ドロップダウンリストでの重複項目の許可
複数選択が許可されているドロップダウンリストでは、重複が問題になることがあります。上記のVBAコードでは、ドロップダウンリスト内の重複項目は許可されません。重複項目を保持する必要がある場合は、このセクションのVBAコードをお試しください。
VBAコード: データ検証ドロップダウンリストで重複を許可する
Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 20240118
Dim xRng As Range
Dim xValue1 As String
Dim xValue2 As String
Dim delimiter As String
Dim TargetRange As Range
Set TargetRange = Me.UsedRange ' Users can change target range here
delimiter = ", " ' Users can change the delimiter here
If Target.Count > 1 Or Intersect(Target, TargetRange) Is Nothing Then Exit Sub
On Error Resume Next
Set xRng = TargetRange.SpecialCells(xlCellTypeAllValidation)
If xRng Is Nothing Then Exit Sub
Application.EnableEvents = False
xValue2 = Target.Value
Application.Undo
xValue1 = Target.Value
Target.Value = xValue2
If xValue1 <> "" And xValue2 <> "" Then
Target.Value = xValue1 & delimiter & xValue2
End If
Application.EnableEvents = True
On Error GoTo 0
End Sub
結果
これで、現在のワークシートのドロップダウンリストから複数の項目を選択できるようになります。ドロップダウンリストセル内で項目を繰り返すには、リストからその項目を再度選択し続けます。スクリーンショットをご覧ください:
ドロップダウンリストからの既存の項目の削除
ドロップダウンリストから複数の項目を選択した後、ドロップダウンリストセルから既存の項目を削除する必要が生じることがあります。このセクションでは、このタスクを達成するのに役立つ別のVBAコードを提供します。
VBAコード: ドロップダウンリストセルから既存の項目を削除する
Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 20240118
Dim xRngDV As Range
Dim TargetRange As Range
Dim oldValue As String
Dim newValue As String
Dim delimiter As String
Dim allValues As Variant
Dim valueExists As Boolean
Dim i As Long
Dim cleanedValue As String
Set TargetRange = Me.UsedRange ' Set your specific range here
delimiter = ", " ' Set your desired delimiter here
If Target.CountLarge > 1 Then Exit Sub
' Check if the change is within the specific range
If Intersect(Target, TargetRange) Is Nothing Then Exit Sub
On Error Resume Next
Set xRngDV = Target.SpecialCells(xlCellTypeAllValidation)
If xRngDV Is Nothing Or Target.Value = "" Then
' Skip if there's no data validation or if the cell is cleared
Application.EnableEvents = True
Exit Sub
End If
On Error GoTo 0
If Not Intersect(Target, xRngDV) Is Nothing Then
Application.EnableEvents = False
newValue = Target.Value
Application.Undo
oldValue = Target.Value
Target.Value = newValue
' Split the old value by delimiter and check if new value already exists
allValues = Split(oldValue, delimiter)
valueExists = False
For i = LBound(allValues) To UBound(allValues)
If Trim(allValues(i)) = newValue Then
valueExists = True
Exit For
End If
Next i
' Add or remove value based on its existence
If valueExists Then
' Remove the value
cleanedValue = ""
For i = LBound(allValues) To UBound(allValues)
If Trim(allValues(i)) <> newValue Then
If cleanedValue <> "" Then cleanedValue = cleanedValue & delimiter
cleanedValue = cleanedValue & Trim(allValues(i))
End If
Next i
Target.Value = cleanedValue
Else
' Add the value
If oldValue <> "" Then
Target.Value = oldValue & delimiter & newValue
Else
Target.Value = newValue
End If
End If
Application.EnableEvents = True
End If
End Sub
結果
このVBAコードにより、ドロップダウンリストから複数の項目を選択し、すでに選択した項目を簡単に削除できます。複数の項目を選択した後、特定の項目を削除したい場合は、リストからその項目を再度選択するだけです。
カスタム区切り文字の設定
上記のVBAコードでは、区切り文字がカンマに設定されています。この変数を任意の文字に変更して、ドロップダウンリスト選択の区切り文字として使用できます。以下のように行います:
上記のVBAコードには、次の行がすべて含まれていることがわかります:
delimiter = ", "
必要に応じて、カンマを任意の区切り文字に変更するだけです。たとえば、セミコロンで項目を区切りたい場合は、その行を次のように変更します:
delimiter = "; "
delimiter = vbNewLine
指定範囲の設定
上記のVBAコードは、現在のワークシート内のすべてのドロップダウンリストに適用されます。VBAコードを特定の範囲のドロップダウンリストにのみ適用したい場合は、上記のVBAコードで次のように範囲を指定できます。
上記のVBAコードには、次の行がすべて含まれていることがわかります:
Set TargetRange = Me.UsedRange
その行を次のように変更するだけです:
Set TargetRange = Me.Range("C2:C10")
保護されたワークシートでの実行
パスワード「123」でワークシートを保護し、保護をアクティブにする前にドロップダウンリストセルを「ロック解除」に設定したと想像してください。これにより、保護後も複数選択機能がアクティブであることが保証されます。ただし、上記のVBAコードはこの場合動作しないため、このセクションでは、保護されたワークシートでの複数選択機能を処理するために特別に設計された別のVBAスクリプトについて説明します。
VBAコード: 重複なしでドロップダウンリストで複数選択を有効にする
Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 20240118
Dim xRng As Range
Dim xValue1 As String
Dim xValue2 As String
Dim delimiter As String
Dim TargetRange As Range
Dim isProtected As Boolean
Dim pswd As Variant
Set TargetRange = Me.UsedRange ' Set your specific range here
delimiter = ", " ' Users can change the delimiter here
If Target.Count > 1 Or Intersect(Target, TargetRange) Is Nothing Then Exit Sub
' Check if sheet is protected
isProtected = Me.ProtectContents
If isProtected Then
' If protected, temporarily unprotect. Adjust or remove the password as needed.
pswd = "yourPassword" ' Change or remove this as needed
Me.Unprotect Password:=pswd
End If
On Error Resume Next
Set xRng = TargetRange.SpecialCells(xlCellTypeAllValidation)
If xRng Is Nothing Then
If isProtected Then Me.Protect Password:=pswd
Exit Sub
End If
Application.EnableEvents = False
xValue2 = Target.Value
Application.Undo
xValue1 = Target.Value
Target.Value = xValue2
If xValue1 <> "" And xValue2 <> "" Then
If Not (xValue1 = xValue2 Or _
InStr(1, xValue1, delimiter & xValue2) > 0 Or _
InStr(1, xValue1, xValue2 & delimiter) > 0) Then
Target.Value = xValue1 & delimiter & xValue2
Else
Target.Value = xValue1
End If
End If
Application.EnableEvents = True
On Error GoTo 0
' Re-protect the sheet if it was protected
If isProtected Then
Me.Protect Password:=pswd
End If
End Sub
Excelのドロップダウンリストで複数選択を有効にすることで、ワークシートの機能性と柔軟性を大幅に向上させることができます。VBAコーディングに慣れていなくても、Kutoolsのようなシンプルなソリューションを好む場合でも、標準的なドロップダウンリストをダイナミックで複数選択可能なツールに変える能力が得られます。これらのスキルがあれば、よりダイナミックでユーザーフレンドリーなExcel文書を作成する準備が整いました。Excelの機能についてさらに深く学びたい方のために、当サイトには豊富なチュートリアルがあります。 こちらでさらに多くのExcelのヒントやコツを発見してください。
関連記事
Excelのドロップダウンリストに入力時に自動補完する
データ検証ドロップダウンリストに多数の値がある場合、適切なものをリスト内で探すためにスクロールするか、直接リストボックスに完全な単語を入力する必要があります。ドロップダウンリストで最初の文字を入力したときに自動補完できる方法があれば、すべてが簡単になります。このチュートリアルでは、この問題を解決する方法を提供します。
Excelで別のワークブックからドロップダウンリストを作成する
ワークブック内のワークシート間でデータ検証ドロップダウンリストを作成するのは非常に簡単です。しかし、データ検証に必要なリストデータが別のワークブックにある場合はどうしますか?このチュートリアルでは、Excelで別のワークブックからドロップダウンリストを作成する方法を詳しく学びます。
Excelで検索可能なドロップダウンリストを作成する
多数の値を持つドロップダウンリストでは、適切なものを見つけるのは簡単ではありません。以前に、ドロップダウンボックスに最初の文字を入力したときに自動補完する方法を紹介しました。自動補完機能に加えて、ドロップダウンリストを検索可能にすることで、リスト内の適切な値を見つける効率を向上させることもできます。検索可能なドロップダウンリストを作るには、このチュートリアルの方法をお試しください。
Excelのドロップダウンリストで値を選択時に他のセルを自動入力する
セル範囲B8:B14に基づいてドロップダウンリストを作成したとします。ドロップダウンリストから値を選択すると、セル範囲C8:C14の対応する値が選択したセルに自動的に入力されるようにしたいとします。この問題を解決するために、このチュートリアルの方法が役立ちます。
最高のオフィス生産性ツール
🤖 | Kutools AI Aide:データ分析を革新:インテリジェント実行 | コード生成 | カスタム数式の作成 | データを分析してグラフを生成 | Kutools Functions を呼び出す… |
人気機能:重複の検索・ハイライト・マーキング | 空白行を削除 | データを失わず列やセルを統合 | 丸める ... | |
スーパーLOOKUP:複数条件VLOOKUP | 複数値VLOOKUP | 複数シートの検索 | ファジーマッチ .... | |
高度なドロップダウンリスト:すばやくドロップダウンリストを作成 | 依存型ドロップダウンリスト | 複数選択ドロップダウンリスト .... | |
列の管理:特定数の列を追加 | 列を移動 | 非表示列の表示状態を切り替え | 範囲と列の比較 ... | |
注目機能:グリッドフォーカス | デザインビュー | 強化された数式バー | ワークブック&ワークシートの管理 | オートテキスト ライブラリ (Auto Text) | 日付ピッカー | データの統合 | セルの暗号化/復号化 | リスト送信で電子メールを送信 | スーパーフィルター | 特殊フィルタ(太字/斜体/取り消し線でフィルタ...) | |
トップ15ツールセット:12 種類のテキストツール(テキストの追加、特定の文字を削除など) | 50 種以上のグラフ タイプ(ガントチャートなど) | 40を超える実用的な 数式(誕生日に基づいて年齢を計算する、など) | 19種の 挿入ツール(QRコードの挿入、パスから画像の挿入など) | 12種類の 変換ツール(単語に変換する、通貨変換など) | 7つの 結合&分割ツール(高度な行のマージ、セルの分割など) | ...さらに多数 |
Kutools for ExcelでExcelスキルを強化し、かつてない効率を体験しましょう。 Kutools for Excelは300以上の高度な機能で生産性向上と時間短縮を実現します。最も必要な機能を今すぐ取得...
Office TabはOfficeにタブ表示を追加し、作業効率を大幅に向上させます
- Word、Excel、PowerPointでタブ編集とタブ閲覧を有効にします
- 同じウィンドウ内の新しいタブで複数のドキュメントを開いたり作成したりできます。新しいウィンドウを開く必要はありません。
- 生産性が50%向上し、1日に何百回ものマウスクリックも削減できます!