打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
自动去重复的下拉菜单,这才叫牛

本文转载自公众号:Excel之家ExcelHome,作者:看见星光。

我们今天聊的内容是单元格的数据有效性(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 ↓,该快捷键可能会和电脑的其它热键冲突,该语句并不是必须的,因此部分亲们可以注释掉它。

图文作者:看见星光

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
用VBA代码查询两列数据差异
完全手册Excel VBA典型实例大全:通过368个例子掌握
Excel VBA 8.44打造更加高效的查找功能 秒杀自带功能
1分钟!学会用Excel自动记录时间,告别手动低效!
利用工作薄事件动态标记相同的数据
详细介绍,如何用EXCEL制作产品售后管理系统
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服