在“数据有效性”下拉列表中设置默认值
我在我的工作表中有很多下拉列表,这些列表是通过菜单“ Data
> Data Validation
>” list
。 在VBA中是否有一种批量方式将它们全部设置为默认值? 默认值是指在列表中声明的第一个值。
BTW。 我在A1中设置了一个下拉列表的源代码,其公式为:
=OFFSET(C1;0;0;1;COUNTA(C1:Z1))
有没有办法把这个公式在B1中,并在下拉列表源中调用=INDIRECT(B1)
只指向一个单元格? (这不起作用)。
要在当前行中使用从列C
到Z
的偏移量:
- select第一行中的任何单元格
-
创build一个命名范围(
Formulas
>Name Manager
>New...
)与Name:
例如validation
和Refers To:
将是你的公式:=OFFSET($C1;0;0;1;COUNTA($C1:$Z1))
- 英文本地用户,使用
,
而不是;
作为列表分隔符
- 英文本地用户,使用
-
select单元格并应用
Data Validation
>允许:List
,来源:=validation
当您在第二行中select一个单元格并观察Name Manager
,您会注意到该公式正在使用对当前行的相对引用。
要使用默认值填充单元格,可以使用以下公式(作为单元格内的普通公式,与数据validationfunction无关):
=INDEX(validation, 1)
并且当您从下拉列表中select一个值时,公式将被选定的值覆盖,因此当您更改列表中的第一个项目时,对于显式选定的单元格,该值不会更改。
我的解决scheme的想法是基于单元格的风格。
(1)为将会有下拉列表的单元格添加新的样式。 我把它命名为“Dropdown”。
(2)为将要下拉列表的单元格应用样式。 这是B2。
(3)为您的下拉列表设置validation项目。 我把它们放在细胞E2:G2中。
(4)如果你想把dynamicvalidation列表放在数据>数据validation>源: =OFFSET($E2;0;0;1;COUNTA($E2:$K2))
或者声明一个命名范围为Aprillionbuild议。 这是非常有用的。 在我的例子中,我可以在H2中添加一个新的validation项目,它会自动包含在validation列表中。
(5)当你想要设置所有的单元格样式下拉到默认值时运行一个macros。 在我的情况下,默认值是'- Choose from the list -
。 即使该值不在“validation”列表中,该值也将被设置。
Sub DropDownListToDefault() Dim oCell As Range Dim ACell As Range Set ACell = ActiveCell For Each oCell In ActiveSheet.UsedRange.Cells If oCell.Style = "Dropdown" Then oCell.Value = "'- Choose from the list -" End If Next ACell.Select End Sub
运行macros后,您将有以下select:
如果您希望用户从下拉列表中select一些内容,则在进一步处理中很容易不接受默认值。