动态更改excel中的下拉列表

时间:2009-05-28 09:07:44

标签: excel

方案如下,

我有一个要在一个单元格中填充的选项列表,比如A1。可以使用Data Validation-List填充选项,这会导致下拉列表出现在A1中。现在我希望B1包含一个下拉列表,其中的条目根据A1中的数据进行更改。

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

我想避免使用VBA。

2 个答案:

答案 0 :(得分:6)

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

www.contextures.com/xlDataval02.html

答案 1 :(得分:0)

在这里,完全没有VBA的解决方案。它使用“表单”工具栏中的实际组合框控件:

  • 在工作簿中添加三个额外的工作表。我称他们为“域名”,“数据”和“动物”
    • 在表“域”上,我做了:
      • 进入(从细胞A1向下)“哺乳动物”,“爬行动物”,“两栖动物”
      • 为范围“域!$ A:$ A”:“域”
      • 定义了名称
      • 为范围“域!$ B:$ 1”:“DomainChoice”
      • 定义了名称
    • 在表格“数据”上,我做了:
      • 输入(从单元格A1向下)“man”,“cat”,“dog”
      • 输入(从单元格B1向下)“蛇”,“蜥蜴”
      • 输入(从单元格C1向下)“青蛙”,“蟾蜍”
    • 在表“动物”上,我做了:
        A1中的
      • ,输入以下公式
        =T(INDIRECT("data!R" & ROW() & "C" & DomainChoice; FALSE))
      • 将此公式填充到第50行。
      • 定义范围“animal!$ A:$ A”:“Animal”
      • 的名称
      • 为范围“animal!$ B:$ 1”定义了名称:“AnimalChoice”
  • 在主工作表上,我创建了两个组合框控件:
    • 在方框1中,我定义了属性(“格式控制...”),如下所示:
      • “输入范围:” - “域名”
      • “Cell link”: - “DomainChoice”
    • 在方框2中,我定义了如下属性:
      • “输入范围:” - “动物”
      • “Cell link”: - “AnimalChoice”

现在,“哺乳动物”,“爬行动物”,“两栖动物”应出现在方框1中,方框2的内容应根据选择进行更改。

查看各种表单,了解幕后发生的情况。唯一的要求是“域”表中的值的顺序对应于“数据”表上的列,并且只能是与“动物”表中填充有公式的行一样多的动物。

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

公式解释如下:

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
  )
)