vba修改下拉列表_⾃动去重复的下拉菜单,这才叫⽜我们今天聊的内容是单元格的数据有效性(2010版本后更名为数据验证),在EH论坛上,星光经常碰到⽹友提问下⾯酱紫的问题:
如何创建去除重复项后的下拉列表?
举个⼩栗⼦。
如下图所⽰,D列是⼀些⼈名,含有重复项。
现在需要根据D列的⼈名,在表格的A列创建去除重复⼈名后的数据验证下拉列表。
动画效果:
代码如下:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect([a:a], Target) Is Nothing Then Exit Sub
'如果选择的单元格不存在于A列,则退出。A列是设置数据验证的区域
If Target.Rows.Count > 1 Then Exit Sub '不允许选择多⾏
Dim arr, brr, i&, j&, k&, s
Dim d As Object
Set d = CreateObject("scripting.dictionary") '后期字典
arr = Range("d1:d" & Cells(Rows.Count, "d").End(xlUp).Row)'数据来源列
If Not IsArray(arr) Then Exit Sub
'如果不存在数据源选项,则arr⾮数组,那么退出程序
For i = 2 To UBound(arr)
'D1是标题,从第2⾏开始遍历数据源,将⼈名装⼊字典
If arr(i, 1) <> "" Then d(arr(i, 1)) = ""
Next
s = Join(d.keys, ",")
With Target.Validation
.Delete'删掉旧的
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:=s 'S为数据验证的序列来源
End With
Application.SendKeys "%{down}"
'SendKeys发出快捷键atl+↓直接弹出数据验证下拉列表
Set d = Nothing '释放字典
End Sub
⼩贴⼠:
1,代码需要粘贴在相关⼯作表标签所对应的VBE窗⼝中。
2,代码使⽤了Worksheet_SelectionChange事件,当⿏标点击A列单元格时,系统⾃动运⾏该段代码。可以通过修改Intersect([a:a], Target)中的[a:a],设置为其它⽬标区域。
3,代码使⽤了 Application.SendKeys "%{down}"语句,其意思是键盘输⼊快捷键alt+↓,该快捷键可能会和电脑的其它热键冲突,该语句并不是必须的,因此部分亲们可以注释掉它。
图⽂作者:看见星光
VBA编程学习与实践
点击图标进⼊ExcelHome云课堂,发现更多精彩课程
数据验证怎么设置下拉菜单专业的职场技能充电站
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论