豫ICP备17040950号-2

表格EXCEL下拉选项如何设置多选项

文章目录

在日常办公中,Excel的使用频率极高。今天,我们来分享一些实用的Excel技巧,特别是如何设置下拉选项的多选功能。📚

📋 WPS操作:在WPS中,进入“数据”选项卡,选择“下拉列表”,添加需要选择的内容,点击确定。然后进入“工具”选项卡,选择“开发工具”,点击VB剪辑器查看代码。在右侧双击需要操作的表格,输入代码后关闭页面即可。

📊 Office操作:在Office中,进入“数据”选项卡,选择“数据验证”,允许选择“序列”,然后添加需要选择的内容,用逗号隔开,点击确定。接着进入“开发工具”选项卡,选择Visual Basic,在右侧双击需要操作的表格,输入代码后关闭页面即可。

通过这些简单的步骤,你可以轻松实现Excel下拉选项的多选功能,提高工作效率。🌟

VBA代码方式支持下拉框多选功能

使用VBA代码,你需要确保你的Excel文件是以启用宏的格式保存的(如.xlsm),并且用户的计算机上启用了宏

VBA宏代码:允许在数据验证列表中进行多项选择,并且可以重复选择相同的项。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Option Explicit

Sub Worksheet_Change(ByVal Target As Range)
' 让数据有效性选择 可以多选,重复选
Dim mgDV As Range
Dim oldVal As String
Dim newVal As String

If Target.Count > 1 Then GoTo exitHandler
On Error Resume Next
Set mgDV = Cells.SpecialCells(xlCellTypeAllValidation)
On Error GoTo exitHandler
If mgDV Is Nothing Then GoTo exitHandler
If Intersect(Target, mgDV) Is Nothing Then
'do nothing
Else
Application.EnableEvents = False
newVal = Target.Value
Application.Undo
oldVal = Target.Value
Target.Value = newVal
If oldVal = "" Then
Else
If newVal = "" Then
Else
Target.Value = oldVal & "," & newVal
End If
End If
End If
exitHandler:
Application.EnableEvents = True
End Sub

VBA宏代码:允许在数据验证列表中进行多项选择,并且不可以重复选择相同的项。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
' 让数据有效性选择可以多选,但不允许重复选

On Error GoTo exitHandler
Application.EnableEvents = False

Dim mgDV As Range
Dim oldVal As String, newVal As String
Dim cellValue As String

' 检查是否只更改了一个单元格
If Target.Count > 1 Then GoTo exitHandler

' 获取所有具有数据验证的单元格
On Error Resume Next
Set mgDV = Cells.SpecialCells(xlCellTypeAllValidation)
On Error GoTo exitHandler

' 如果没有找到任何具有数据验证的单元格,则退出
If mgDV Is Nothing Then GoTo exitHandler

' 检查目标单元格是否与具有数据验证的单元格相交
If Not Intersect(Target, mgDV) Is Nothing Then
' 保存新值
newVal = Target.Value

' 回滚操作以获取旧值
Application.Undo

' 获取旧值
oldVal = Target.Value

' 将新值重新设置回单元格
Target.Value = newVal

' 如果旧值不为空且新值也不为空,则检查并合并它们
If oldVal <> "" And newVal <> "" Then
' 去除可能存在的多余逗号和空格
oldVal = Replace(Trim(oldVal), " ", "")
newVal = Trim(newVal)

' 检查新值是否已存在于旧值中
If InStr(1, "," & oldVal & ",", "," & newVal & ",", vbTextCompare) = 0 Then
' 只有当新值不在旧值中时才添加
Target.Value = oldVal & IIf(oldVal = "", "", ",") & newVal
Else
' 如果新值已经在旧值中,恢复原始值(即撤销这次无效的选择)
Target.Value = oldVal
MsgBox "此选项已被选中,请选择其他选项。", vbInformation
End If
End If
End If

exitHandler:
Application.EnableEvents = True
End Sub