带有多选的下拉列表

Excel 工作表中的经典下拉列表很棒,但它只允许您从提供的集合中选择一个选项。 有时这正是您想要的,但在某些情况下用户需要能够选择 一些 列表中的元素。

让我们看一下这种多选列表的几个典型实现。

选项 1. 水平

用户从下拉列表中逐一选择项目,它们出现在被更改单元格的右侧,自动水平列出:

本例中单元格 C2:C5 中的下拉列表以标准方式创建,即

  1. 选择单元格 C2:C5
  2. 选项卡或菜单 时间 选择一个团队 数据验证
  3. 在打开的窗口中,选择一个选项 清单 并指定为范围 来源 具有列表 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 中插入宏代码的位置

发表评论