在“数据有效性”下拉列表中设置默认值

我在我的工作表中有很多下拉列表,这些列表是通过菜单“ Data > Data Validation >” list 。 在VBA中是否有一种批量方式将它们全部设置为默认值? 默认值是指在列表中声明的第一个值。

BTW。 我在A1中设置了一个下拉列表的源代码,其公式为:

 =OFFSET(C1;0;0;1;COUNTA(C1:Z1)) 

有没有办法把这个公式在B1中,并在下拉列表源中调用=INDIRECT(B1)只指向一个单元格? (这不起作用)。

要在当前行中使用从列CZ的偏移量:

  • select第一行中的任何单元格
  • 创build一个命名范围( Formulas > Name Manager > New... )与Name:例如validationRefers 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一些内容,则在进一步处理中很容易不接受默认值。