在 Excel 下拉列表中选择多个项目 - 完整指南
Excel 下拉列表是确保数据一致性和易于输入的绝佳工具。但是,默认情况下,它们限制您只能选择一项。但是,如果您需要从同一个下拉列表中选择多个项目怎么办?本综合指南将探讨在 Excel 下拉列表中启用多项选择、管理重复项、设置自定义分隔符以及定义这些列表的范围的方法。
启用下拉列表中的多项选择
本节提供两种方法来帮助您在 Excel 中的下拉列表中启用多项选择。
使用VBA代码
要允许在下拉列表中进行多项选择,您可以使用 Visual Basic for Applications (VBA) 在 Excel 中。该脚本可以修改下拉列表的行为,使其成为多项选择列表。请按以下步骤操作。
第 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's 多选下拉列表 特征。这个用户友好的工具简化了在下拉列表中启用多个选择的过程,使您可以自定义分隔符并轻松管理重复项,以满足您的不同需求。
后 安装 Kutools for Excel,转到 库工具 标签,选择 下拉列表 > 多选下拉列表。然后需要进行如下配置。
- 指定包含需要从中选择多个项目的下拉列表的范围。
- 指定下拉列表单元格中所选项目的分隔符。
- 点击 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 人工智能助手:基于以下内容彻底改变数据分析: 智能执行 | 生成代码 | 创建自定义公式 | 分析数据并生成图表 | 调用 Kutools 函数... |
热门特色: 查找、突出显示或识别重复项 | 删除空白行 | 合并列或单元格而不丢失数据 | 不使用公式进行四舍五入 ... | |
超级查询: 多条件VLookup | 多值VLookup | 跨多个工作表的 VLookup | 模糊查询 .... | |
高级下拉列表: 快速创建下拉列表 | 依赖下拉列表 | 多选下拉列表 .... | |
列管理器: 添加特定数量的列 | 移动列 | 切换隐藏列的可见性状态 | 比较范围和列 ... | |
特色功能: 网格焦点 | 设计图 | 大方程式酒吧 | 工作簿和工作表管理器 | 资源库 (自动文本) | 日期选择器 | 合并工作表 | 加密/解密单元格 | 按列表发送电子邮件 | 超级筛选 | 特殊过滤器 (过滤粗体/斜体/删除线...)... | |
前 15 个工具集: 12 文本 工具 (添加文本, 删除字符,...) | 50+ 图表 类型 (甘特图,...) | 40+ 实用 公式 (根据生日计算年龄,...) | 19 插入 工具 (插入二维码, 从路径插入图片,...) | 12 转化 工具 (小写金额转大写, 货币兑换,...) | 7 合并与拆分 工具 (高级组合行, 分裂细胞,...) | ... 和更多 |
使用 Kutools for Excel 增强您的 Excel 技能,体验前所未有的效率。 Kutools for Excel 提供了 300 多种高级功能来提高生产力并节省时间。 单击此处获取您最需要的功能...
Office Tab 为 Office 带来选项卡式界面,让您的工作更加轻松
- 在Word,Excel,PowerPoint中启用选项卡式编辑和阅读,发布者,Access,Visio和Project。
- 在同一窗口的新选项卡中而不是在新窗口中打开并创建多个文档。
- 每天将您的工作效率提高50%,并减少数百次鼠标单击!