【问题标题】:Excel: Create two columns of pulldown lists with one dependent on anotherExcel:创建两列下拉列表,其中一列依赖于另一列
【发布时间】:2016-02-27 03:12:24
【问题描述】:

这似乎是一个我找不到答案的直截了当的问题。

我正在 Excel 中输入产品列表。我们的商店在这些部门内设置了部门和班级。

我有一列标记为“部门”,它从另一个工作表的命名列表中提取(使用数据验证)。 [也就是说,在 Validate: Settings 中,消息来源说“=departments”,这就是我命名该部门列表的名称]。

这工作得很好,我了解数据验证。我将整个部门列设置为使用数据验证在每条新记录上显示此列表。每次都有效,而且效果很好。

这就是问题所在。课程取决于部门。为了让这个简单,想象一下我有 2 个部门(我真的有大约 40 个部门和 100 个班级):

  • 计算机
  • 监视器

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

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

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

如果用户为新产品选择计算机部门,则下一列 Class 应显示计算机的可能类别(笔记本电脑、台式机...)

从我读过的所有内容来看,我应该做一个 INDIRECT() 查找...我可以很容易地为列中的单个单元格做到这一点。我可以转到第 4 行并单击“类”单元格并输入以下公式进行数据验证:

 =INDIRECT($AF$4)

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

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

正如我所解释的,这适用于单个单元格。它不适用于整个列。也就是说,我无法选择整个列并输入该公式......它始终附加到 AF4(或我输入的任何内容)。我需要为每一行更改它。

我已经尝试了所有这些 - 它们都不起作用。

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

几乎每次我收到一条错误消息“源当前评估为错误 - 继续?”这意味着它永远不会起作用:-(

我希望这些信息足以让一些 Excel 专家帮助我。

谢谢!

【问题讨论】:

    标签: excel validation drop-down-menu multiple-columns relational


    【解决方案1】:

    好的,我可以使用您的示例。我在Sheet2的A列输入了部门,在B列输入了产品,如下:

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

    然后,我为 A 列设置了一个动态命名范围,以减少 Excel 上的查找负载。我将范围命名为“DeptsForProducts”。重要的是,您不仅要重复每个产品行的部门名称,还要对列进行排序,以便计算机部门的所有产品都放在一起,显示器行的所有产品放在一起,等等。

    然后,返回到您的原始工作表(我使用的是 Sheet1;A 列包含部门的验证,B 列是我希望显示产品验证的位置)。选择所有B列,打开数据验证窗口,将允许:更改为列表,然后输入以下公式:

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

    您将再次收到“源当前评估为错误”消息;忽略它并单击是。现在,B 列中的任何单元格与 A 列中的计算机都将具有笔记本电脑、台式机、机架安装或服务器的下拉列表; B 列中的任何单元格与 A 列中的监视器将具有 LCD、CRT 或 OLED 的下拉列表;并且任何具有空白或无效部门的单元格将没有可用的下拉列表。

    在 Excel 2013 中测试。

    【讨论】:

    • 哇,尼克!这样可行!你的文本中有一个错字(你在一个地方称之为 DeptForProducts,在另一个地方称之为 DeptsForProducts)。我可以完成这项工作 - 非常感谢!
    • 两个问题尼克:1,我的部门下拉列表中有计算机,计算机,计算机......我应该制作一个不同的列表来完成这项工作吗? 2,在我的文件中(它的格式我无法更改 - 长篇大论),部门在 I 列,类在 E 列 - 我似乎无法让你的公式与这些列一起使用(我'有 Sheet2 和上面一样的 A 列和 B 列) - 你能解释一下这个公式到底在做什么吗?
    • 糟糕,修正了我的错字!对于 Q1:是的,我使用了两个单独的列表。一个列表只包含部门;另一个列表包含每个部门内的部门和产品,每个产品的部门都重复。
    • =OFFSET(Sheet2!$B$1,MATCH(I1,DeptsForProducts,0)-1,0,COUNTIF(DeptsForProducts,I1))
    • 我明白了 - 显然不能将代码放入这些 cmets 中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 2019-09-05
    • 2021-05-26
    • 1970-01-01
    • 2021-08-30
    • 2017-01-14
    相关资源
    最近更新 更多