我们今天聊的内容是单元格的数据有效性(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,