在Excel中dynamic更改下拉列表

情况如下,

A1,我有一个单元格的列表。 可以使用数据validation列表填充选项,这会导致在A1中出现下拉列表。 现在我想让B1包含一个下拉列表,其中的条目根据A1中的数据进行更改。

作为一个典型的例子,假设A1提供了哺乳动物,爬行动物和两栖动物的select。 如果我select哺乳动物,我应该在B1中select人,猫,狗作为选项。 如果我select爬行动物,蛇和蜥蜴出现在B1的选项。 如果我select两栖类,我应该得到青蛙和蟾蜍。

我想避免使用VBA。

在validation列表中使用INDIRECT公式,如下所述:

http://www.contextures.com/xlDataval02.html

在这里,你去完全没有VBA的解决scheme。 它使用“Forms”工具栏中的实际combobox控件:

  • 将三个额外的工作表添加到您的工作簿。 我把他们叫做“域”,“数据”和“动物”
    • 在表单“域”上,我做了:
      • (从细胞A1向下)“哺乳动物”,“爬行动物”,“两栖动物”
      • 为范围“domain!$ A:$ A”定义一个名称:“Domain”
      • 为范围“domain!$ B:$ 1”定义了一个名称:“DomainChoice”
    • 在表格“数据”上,我做了:
      • (从A1格向下)“男”,“猫”,“狗”
      • 进入(从细胞B1向下)“蛇”,“蜥蜴”
      • (从C1单元格向下)“青蛙”,“蟾蜍”
    • 在表“动物”上,我做了:
      • 在A1中input下面的公式
        =T(INDIRECT("data!R" & ROW() & "C" & DomainChoice; FALSE))
      • 把这个公式填充到第50行。
      • 为范围“animal!$ A:$ A”定义一个名称:“Animal”
      • 为范围“animal!$ B:$ 1”定义了一个名称:“AnimalChoice”
  • 在主工作表上,我创build了两个combobox控件:
    • 在框1中,我定义了属性(“格式控制…”),如下所示:
      • “input范围:” – “域”
      • “单元格链接”: – “DomainChoice”
    • 在框2中,我定义了如下属性:
      • “input范围:” – “动物”
      • “单元格链接”: – “AnimalChoice”

现在在框1中应该出现“哺乳动物”,“爬行动物”,“两栖动物”,框2的内容应该根据select而变化。

看看各种表格,看看幕后发生了什么。 唯一的要求是,“域”表中的值的顺序与“数据”表中的列的顺序相对应,并且只能是与“动物”表中的公式填充的行一样多的动物。

如果需要,您可以隐藏三个帮手工作表。

该公式解释说:

 T( // returns an empty string unless the argument is a text value INDIRECT( // returns the value at the given reference string "data!R" // build a dynamic reference string to "data!R1C1" & ROW() // the current row, changes as you fill down the formula & "C" & DomainChoice // defined name of "domain!$B:$1", contains box 1 choice ; FALSE // flag to indicate that the formula is in "R1C1" format ) )