在 Excel 下拉列表中选择多个项目——完整指南
Excel 下拉列表是确保数据一致性并简化输入的绝佳工具。然而,默认情况下,它仅允许选择单个项目。如果您需要从同一个下拉列表中选择多个项目,该怎么办?本综合指南将为您详细介绍如何在 Excel 下拉列表中启用多选功能、管理重复项、设置自定义分隔符,以及定义这些列表的作用范围。

在下拉列表中启用多选
本节为您提供两种方法,轻松在 Excel 下拉列表中启用多选功能。
使用 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”选项卡,依次选择“下拉列表”>“使下拉列表可多次选择”,然后按如下方式配置。
- 指定包含支持多选的下拉列表的区域。
- 指定下拉列表单元格中所选项目数量的分隔符。
- 单击“确定”即可完成设置。
效果
现在,当您单击限定区域中带有下拉列表的单元格时,其旁边会立即弹出一个列表框。只需点击项目旁的“+”按钮,即可将其添加到下拉单元格中;点击“——”按钮,则可轻松移除不再需要的项目。请参见下方演示:

- 若希望在单元格内垂直显示所选项目数量,请勾选“插入分隔符后换行”选项;若偏好水平排列,则保持该选项未勾选。
- 如需为下拉列表添加搜索栏,请勾选“启用搜索功能”选项。
- 要使用此功能,请先 下载并安装 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 代码均包含以下行:
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 中创建可搜索的下拉列表
当下拉列表包含大量选项时,快速找到所需内容并不容易。此前我们介绍过一种方法:在下拉框中输入首字母即可自动补全。除了自动补全,您还可以为下拉列表添加搜索功能,大幅提升查找效率。立即尝试本教程中的方法,让您的下拉列表更智能、更高效!
在 Excel 下拉列表中选择值时自动填充其他单元格
假设您已基于单元格区域 B8:B14 创建了下拉列表。当您从中选择任意值时,对应的 C8:C14 区域中的值将自动填充到目标单元格中。本教程的方法将助您轻松实现这一功能!
最佳办公效率工具
| 🤖 | KUTOOLS AI 助手:基于以下内容革新数据分析:智能执行 | 生成代码| 创建自定义公式 | 数据分析及生成图表| 调用 Kutools Functions…… |
| 热门功能:查找、高亮或标记重复项 | 删除空白行 | 合并列或单元格且不丢失数据 | 不使用公式的四舍五入…… | |
| 高级 LOOKUP:多条件 VLookup | 多值 VLookup | 跨多个工作表 VLookup | 模糊查找…… | |
| 高级下拉列表:快速创建下拉列表 | 级联下拉列表 | 多选下拉列表…… | |
| 列管理器:添加指定数量的列|移动列|切换隐藏列的可见性状态|比较区域与列…… | |
| 精选功能:网格聚焦 | 设计视图 |增强编辑栏 | 工作簿和工作表管理器 | 资源库(自动文本)| 日期提取 | 汇总工作表 | 加密/解密单元格 | 按列表发送电子邮件 | 超级筛选 | 特殊筛选(筛选粗体单元格/斜体/删除线……) ...... | |
| 热门 15 工具集:12 文本工具(添加文本,删除特定字符,……)| 50+ 图表 类型(甘特图,……)| 40+ 实用公式(基于生日计算年龄,……)| 19 插入工具(插入二维码,从路径插入图片,……)| 12 转换工具(小写金额转大写,汇率转换,……)| 7 合并和拆分工具(高级合并行,分割单元格,……)|……以及更多 |
使用 Kutools for Excel 强化您的 Excel 技能,体验前所未有的高效办公!Kutools for Excel 提供超过 300 项高级功能,助您提升工作效率、节省宝贵时间。立即点击此处,获取您最需要的功能……
Office Tab 为 Office 带来标签式界面,让您的工作更轻松
- 在 Word、Excel、PowerPoint、Publisher、Access、Visio 和 Project 中启用标签式编辑与阅读,大幅提升多文档处理效率!
- 在同一个窗口的新标签页中打开和创建多个文档,而非在新窗口中操作。
- 将您的工作效率提升 50%,每天为您减少数百次鼠标点击!
所有 Kutools 插件,一个安装程序
Kutools for Office 套件捆绑了适用于 Excel、Word、Outlook 和 PowerPoint 的插件,以及 Office Tab Pro,是跨 Office 应用高效协作团队的理想之选。
- 一体化套件— Excel、Word、Outlook 和 PowerPoint 插件 + Office Tab Pro
- 一个安装程序,一个许可证— 几分钟内即可完成设置(支持 MSI)
- 协同效果更佳— 在多个 Office 应用间实现高效流畅的生产力
- 30 天全功能试用— 无需注册,无需信用卡
- 超值之选— 比单独购买插件更省钱

