excel利用VBA生成无重复无空值的数据有效性下拉列表

如题所述

在Excel工作表的某个单元格中应用数据有效性设置来制作下拉列表时,如果引用的行或列区域中包含空单元格或重复项,那么在有效性下拉列表中会与原区域中的内容完全相同,也会包含空值或重复项,显得有些不够美观。例如下图是A1单元格的一个下拉列表。
通常可以去掉重复项和空单元格后再设置数据有效性,但如果不想改变单元格的结构,可以使用下面的VBA代码来解决这个问题,假如要设置下拉列表的单元格为D5,数据区域为K8:K38,步骤如下:
1.按Alt+F11,打开VBA编辑器。
2.在“工程”窗口中双击要包含数据有效性设置的工作表,在右侧代码窗口中输入下列代码:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim RowNum, ListRows, ListStartRow, ListColumn As Integer
Dim TheList As String
Dim Repeated As Boolean
If Target.Address > "$D$5" Then Exit Sub
With Range("k8:K38")
ListRows = .Rows.Count
ListStartRow = .Row
ListColumn = .Column
End With
For RowNum = 0 To ListRows – 1
Repeated = False
If Not IsEmpty(Cells(ListStartRow + RowNum, ListColumn)) Then
For i = 0 To RowNum – 1
If Cells(ListStartRow + RowNum, ListColumn) = Cells(ListStartRow + i, ListColumn) Then
Repeated = True
Exit For
End If
Next i
If Not Repeated Then TheList = TheList & Cells(ListStartRow + RowNum, ListColumn) & ","
End If
Next RowNum
TheList = Left(TheList, Len(TheList) – 1)
With Range("D5").Validation
.Delete
.Add _
Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=TheList
End With
End Sub
3.关闭VBA编辑器返回Excel界面,选择D5单元格,单击下拉箭头即可看到不包含空值和无重复的下拉列表。
说明:上述代码使用了工作表的SelectionChange事件,当在工作表中重新选择单元格后会执行上述代码。需根据实际将代码中的单元格“D5”和区域“k8:K38”进行更改
温馨提示:内容为网友见解,仅供参考
无其他回答

excel利用VBA生成无重复无空值的数据有效性下拉列表
1.按Alt+F11,打开VBA编辑器。2.在“工程”窗口中双击要包含数据有效性设置的工作表,在右侧代码窗口中输入下列代码:Private Sub Worksheet_SelectionChange(ByVal Target As Range)Dim RowNum, ListRows, ListStartRow, ListColumn As Integer Dim TheList As String Dim Repeated As Boolean If Targe...

Excel 如何用VBA实现单元格有效性下拉菜单
With [b1].Validation '生成数据有效性下拉菜单 【b1】为指定单元格 .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:=x ’x为有效性菜单格式为:A,B,C,D .IgnoreBlank = True .InCellDropdown = True .InputTitle ...

excel vba如何制作数据有效性下拉列表使源数据不变的情况下,下拉列表不...
回车并向下填充。这样,Sheet2的AB列数据变动,Sheet1的A2起就跟着变动。

如何在excel里将一列数据做成下拉列表框,内容不重复
必须使用辅助列或者VBA。辅助列的方法,比如A1:A10包含重复项目,在B2输入下面公式,按CTRL+SHIFT+ENTER结束后向下复制:=INDEX(A:A,MIN(IF(COUNTIF(B$1:B1,A$1:A$10),4^8,ROW($1:$10)))&""然后在【数据】→有效性→序列→公式中输入:=OFFSET($B$2,,,SUMPRODUCT(--($B$2:$B$11<...

我用excel的有效性制作了下拉框,但是怎么才能实现不选重复的数据。
假设你要设置A列的,设置数据有效性——自定义——公式—— =COUNTIF(A:A,A1)=1 提示信息你自己输入了。

求助excel中如何引用工作表中某一列中不重复的部分为作为另一个工作表...
有两种方法可以实现:VBA与辅助列提取不重复数据后做下拉菜单,而提取不重复数据又有公式法和查询法,如SQL或Power Query。下面介绍公式法:如图,在“实时库存总账”的右侧空列,如G列中提取“入库记录”中C列的不重复数据,考虑C列可能增加,公式引用的范围可大一些,如C3:C100(最好不用整列),G...

Excel 如何利用VBA设置数据有效性
.Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _xlBetween, Formula1:="1,2".IgnoreBlank = True .InCellDropdown = True .InputTitle = "".ErrorTitle = "".InputMessage = "".ErrorMessage = "".IMEMode = xlIMEModeNoControl .ShowInput = True .Show...

excel如何实现输入部分文字,弹出下拉式列表(包含该文字所有记录),以...
把问题作为内容(邮件主题一定要包含“excel”,本人以此为依据辨别非垃圾邮件,以免误删)、excel样表文件(把现状和目标效果表示出来)作为附件发来看下 yqch134@163.com

怎么样增加excel的下拉菜单长度(数据--有效性--序列) 下拉只能看到八项 ...
可通过VBA实现下拉框加长的(显示更多待选项)的需求.按Alt+F11,调出VBA,在VBAProject 右键→插入→用户窗体 请点击输入图片描述 调整窗体成细长的形状 请点击输入图片描述 分别增加一个按钮和列表框 请点击输入图片描述 在工作表某列把待选内容输入好(此例放N列);双击列表框,在弹出的窗口中输入以下代码...

excel图表技巧显示数据有效性列表
数据有效性(即“数据验证”)是Excel中常使用的一项功能。然而,在使用数据有效性创建好下拉列表后,我们不能够随便修改列表中的字体或字体大小。如果工作表显示比例较小,那么数据有效性列表中的内容也会相应地变小,这样就很难看清楚里面的内容,如下图1所示。图1 我们可以使用一点小技巧,用VBA代码...

相似回答
大家正在搜