在 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
结果
当你返回到工作表时,下拉列表将允许你选择多个选项,请参见下面的演示:
- 适用于当前工作表中的所有数据验证下拉列表,包括现有的和未来创建的。
- 防止你在每个下拉列表中多次选择相同的项目。
- 使用逗号作为所选项的分隔符。要使用其他分隔符,请查看此部分以更改分隔符。
只需点击几下即可使用 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 代码中按如下方式指定范围。
如你所见,上述 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 中的相应值自动填充到选定单元格中。为了解决这个问题,本教程中的方法将对你有所帮助。
最佳 Office 办公效率工具
🤖 | Kutools AI 助手:基于智能执行,彻底革新数据分析 |生成代码|创建自定义公式|分析数据并生成图表|调用 Kutools Functions… |
热门功能:查找、选中项的背景色或标记重复项|删除空行|合并列或单元格且不丢失数据|四舍五入(无公式)... | |
高级 LOOKUP:多条件查找 (VLookup)|多值查找 (VLookup)|多表查找 (VLookup Across Multiple Sheets)|模糊查找 (Fuzzy Lookup)... | |
高级下拉列表:快速创建下拉列表|依赖型下拉列表|多选下拉列表... | |
列管理器:添加指定数量的列 |移动列 |切换隐藏列的可见状态| 比较区域及列... | |
特色功能:网格聚焦|设计视图|增强编辑栏|工作簿 & 工作表管理器|资源库(自动文本)|日期提取|合并数据|加密/解密单元格|按列表发送电子邮件|超级筛选|特殊筛选(筛选粗体/倾斜/删除线等)... | |
热门15 大工具集:12 款文本工具(添加文本、删除特定字符等)|50+ 种图表 类型(甘特图等)|40+ 实用公式(基于生日计算年龄等)|19 款插入工具(插入二维码、按路径插入图片等)|12 种转换工具(小写金额转大写、汇率转换等)|7 款合并与分割工具(高级合并行、分割单元格等)|...更多精彩等你发现 |
用 Kutools for Excel 加速你的 Excel 技能,体验前所未有的高效办公。 Kutools for Excel 提供300 多项高级功能,助您提升效率,节省大量时间。点击此处,获取你最需要的功能...
Office Tab 为 Office 带来标签式界面,让你的工作更加轻松
- 在 Word、Excel、PowerPoint 启用标签式编辑和阅读
- 在同一窗口的新标签中打开和创建多个文档,无需新建窗口。
- 办公效率提升50%,每天帮你减少上百次鼠标点击!