Excel 工作表中的经典下拉列表很棒,但它只允许您从提供的集合中选择一个选项。 有时这正是您想要的,但在某些情况下用户需要能够选择 一些 列表中的元素。
让我们看一下这种多选列表的几个典型实现。
选项 1. 水平
用户从下拉列表中逐一选择项目,它们出现在被更改单元格的右侧,自动水平列出:
本例中单元格 C2:C5 中的下拉列表以标准方式创建,即
- 选择单元格 C2:C5
- 选项卡或菜单 时间 选择一个团队 数据验证
- 在打开的窗口中,选择一个选项 清单 并指定为范围 来源 具有列表 A1:A8 源数据的单元格
然后你需要在工作表模块中添加一个宏,它会完成所有的主要工作,即在绿色单元格的右侧添加选定的值。 为此,请右键单击带有下拉列表的工作表选项卡并选择命令 源代码. 将以下代码粘贴到打开的 Visual Basic 编辑器窗口中:
Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Not Intersect(Target, Range("C2:C5")) Is Nothing And Target.Cells.Count = 1 Then Application.EnableEvents = False If Len(Target.Offset (0, 1)) = 0 Then Target.Offset(0, 1) = Target Else Target.End(xlToRight).Offset(0, 1) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub
如有必要,将此代码第二行中下拉列表 C2:C5 的敏感范围替换为您自己的。
选项 2. 垂直
和上个版本一样,但是新选择的值不是加到右边,而是加到底部:
它以完全相同的方式完成,但处理程序宏代码略有变化:
Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Not Intersect(Target, Range("C2:F2")) Is Nothing And Target.Cells.Count = 1 Then Application.EnableEvents = False If Len(Target.Offset (1, 0)) = 0 Then Target.Offset(1, 0) = Target Else Target.End(xlDown).Offset(1, 0) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub
同样,如有必要,请在此代码的第二行中将 C2:F2 下拉列表的敏感范围替换为您自己的范围。
选项 3. 在同一个单元格中累积
在此选项中,累积发生在下拉列表所在的同一单元格中。 所选元素由任何给定字符(例如,逗号)分隔:
与前面的方法一样,绿色单元格中的下拉列表以完全标准的方式创建。 再次,所有工作都由工作表模块中的宏完成:
Private Sub Worksheet_Change(ByVal Target As Range)如果不相交(Target,Range(“C2:C5”))是Nothing并且Target.Cells.Count = 1 Then Application.EnableEvents = False newVal = Target Application.Undo oldval = Target 如果 Len(oldval) <> 0 And oldval <> newVal Then Target = Target & "," & newVal Else Target = newVal End If If Len(newVal) = 0 Then Target.ClearContents Application.EnableEvents = True End If结束子
如果需要,您可以将第 9 行代码中的分隔符(逗号)替换为您自己的(例如,空格或分号)。
- 如何在 Excel 工作表单元格中创建一个简单的下拉列表
- 包含内容的下拉列表
- 添加了缺少选项的下拉列表
- 什么是宏,如何使用它们,在 Visual Basic 中插入宏代码的位置