Excel:创build两列下拉列表,一列依赖于另一列

这似乎是一个简单的问题,我无法find答案。

我在Excel中input产品列表。 我们的商店在这些部门里设置了部门和类别。

我有一列标记为“部门”,从另一张工作表中的名字列表中拉(使用数据validation)。 [也就是说,在“validation:设置”中,源代码是“=部门”,这就是我所指定的部门列表]。

这工作得很好,我理解数据validation。 我将整个Department列设置为使用数据validation在每个新logging上显示此列表。 每次工作,运作良好。

这是问题。 类依赖于部门。 为了使这个简单想象我有2个部门(我真的有大约40个部门和100个class):

  • 电脑
  • 显示器

每个部门都有自己的产品类别:

  • 电脑=笔记本电脑,台式机,机架式,服务器
  • 显示器= LCD,CRT,OLED

为了存储这些,我在第二张纸上列出了“计算机”的所有类,并将该列表命名为“计算机”。 我在另一张表的C列中列出了三个监视器类,并将该列表命名为“监视器”

如果用户select一个新产品的部门计算机,下一列,class级应显示可能的类为计算机(笔记本电脑,桌面…)

从我读过的所有东西,我应该做一个间接()查找…我可以很容易地为列中的单个单元格。 我可以去第4行,点击类单元格,并把这个公式进行数据validation:

=INDIRECT($AF$4) 

在这种情况下,“AF4”是一个具有部门LOWER的计算,其中名称中的空格用下划线replace(然后我在列表中使用相同的命名约定)。 例如:

  =LOWER(SUBSTITUTE(I17," ","_")) 

正如我所解释的,这对单个细胞是有效的。 它不适用于整个列。 也就是说,我不能select整个专栏,并把它放在这个公式中……它总是依附于AF4(或者放在那里的任何东西)。 我需要它来改变每一行。

我已经尝试了所有这些 – 他们都没有工作。

  =INDIRECT(OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,4)) =INDIRECT(ADDRESS(ROW(), "AF")) =INDIRECT(INDIRECT("AF"&ROW())) 

几乎每次我收到一个错误说:“源目前评估到一个错误 – 继续?” 这意味着它永远不会工作:-(

我希望这是一些Excel专家在那里帮助我的足够信息。

谢谢!

好的,我用你的例子来解决问题。 我进入了Sheet2栏A的部门,B栏的产品是这样的:

 Computers Laptop Computers Desktop Computers Rack Mount Computers Server Monitors LCD Monitors CRT Monitors OLED 

然后,为列A设置一个dynamic命名范围,以减lessExcel上的查找负载。 我将范围命名为“DeptsForProducts”。 重要的是,您不仅要重复每个产品行的部门名称,而且要对列进行sorting,以使计算机部门的所有产品都在一起,“监视器”行的所有产品都在一起等等。

然后,返回到您的原始工作表(我使用Sheet1;列A持有部门validation和列B是我想validation的产品出现)。 select全部列B,打开数据validation窗口,将允许:更改为列表,然后input以下公式:

 =OFFSET(Sheet2!$B$1,MATCH(A1,DeptsForProducts,0)-1,0,COUNTIF(DeptsForProducts,A1)) 

您将再次获得“源目前评估为错误”消息; 忽略它,然后单击是。 现在,列B中带有计算机的列中的任何单元格将具有膝上型计算机,桌面,机架安装或服务器的下拉列表; 列A中的监视器列B中的任何单元将具有LCD,CRT或OLED的下拉列表; 任何有空白或无效部门的单元格都没有可用的下拉列表。

在Excel 2013中testing。