Excel: 创建两列下拉列表,其中一列依赖于另一列
Excel: Create two columns of pulldown lists with one dependent on another
这似乎是一个直截了当的问题,但我找不到答案。
我正在 Excel 中输入产品列表。我们的商店在这些部门中设置了 Departments 和 Classes。
我有一个标记为 "Department" 的列,它从另一个 Sheet 的命名列表中提取(使用数据验证)。 [也就是说,在 Validate: Settings 中,源说“=departments”,这是我命名的部门列表]。
这工作得很好,我理解数据验证。我将整个部门列设置为使用数据验证在每个新记录上显示此列表。每次都有效,效果很好。
问题来了。 Classes 取决于部门。为了简单起见,假设我有 2 个部门(我实际上有大约 40 个部门和 100 个 类):
- 计算机
- 监视器
每个部门都有自己的 类 产品:
- 计算机 = 笔记本电脑、台式机、机架式、服务器
- 显示器 = LCD、CRT、OLED
为了存储这些,我在第二个 sheet 上有 B 列,其中包含 "Computers" 的所有 Classes 并将该列表命名为 "computers"。我在另一个 sheet 的 C 列中列出了三个监视器 类 并将该列表命名为 "monitors"
如果用户为新产品选择部门计算机,下一列 Class 应该显示可能的 类 计算机(笔记本电脑、台式机...)
从我读过的所有内容来看,我应该进行 INDIRECT() 查找...对于列中的单个单元格,我可以很容易地做到这一点。我可以转到第 4 行并单击 Class 单元格并输入此公式进行数据验证:
=INDIRECT($AF)
在这种情况下,"AF4" 是一个计算,其中部门的较低部分用下划线替换名称中的空格(然后我在我的列表中使用相同的命名约定)。例如:
=LOWER(SUBSTITUTE(I17," ","_"))
正如我所解释的,这适用于单个细胞。它不适用于整个列。也就是说,我不能 select 整列并放入该公式...它始终附加到 AF4(或我放入其中的任何内容)。我需要为每一行更改它。
我已经尝试了所有这些 - none 其中有效。
=INDIRECT(OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,4))
=INDIRECT(ADDRESS(ROW(), "AF"))
=INDIRECT(INDIRECT("AF"&ROW()))
几乎每次我都收到一条错误消息说 "The source currently evaluates to an error - Continue?",这意味着它永远不会工作:-(
我希望这些信息足以让 Excel 专家帮助我。
谢谢!
好的,我用你的例子成功了。我在Sheet2的A列输入了部门,B列输入了产品,是这样的:
Computers Laptop
Computers Desktop
Computers Rack Mount
Computers Server
Monitors LCD
Monitors CRT
Monitors OLED
然后我为 A 列设置一个动态命名范围以减少 Excel 上的查找负载。我将范围命名为 "DeptsForProducts"。重要的是,您不仅要为每个产品行重复部门名称,还要对列进行排序,以便计算机部门的所有产品都在一起,显示器行的所有产品都在一起,等等。
然后,return 到您原来的 sheet(我使用 Sheet1;A 列包含部门验证,B 列是我希望显示产品验证的位置)。 Select所有B列,打开数据验证window,将Allow:改为List,输入以下公式:
=OFFSET(Sheet2!$B,MATCH(A1,DeptsForProducts,0)-1,0,COUNTIF(DeptsForProducts,A1))
您将再次收到 "Source currently evaluates to an error" 消息;忽略它并单击是。现在,B 列中任何包含 A 列中的计算机的单元格都将有一个下拉列表,包括笔记本电脑、台式机、机架安装或服务器; B 列中任何带有 A 列监视器的单元格都会有一个 LCD、CRT 或 OLED 下拉列表;任何包含空白或无效部门的单元格将没有可用的下拉列表。
2013 年 Excel 测试。
这似乎是一个直截了当的问题,但我找不到答案。
我正在 Excel 中输入产品列表。我们的商店在这些部门中设置了 Departments 和 Classes。
我有一个标记为 "Department" 的列,它从另一个 Sheet 的命名列表中提取(使用数据验证)。 [也就是说,在 Validate: Settings 中,源说“=departments”,这是我命名的部门列表]。
这工作得很好,我理解数据验证。我将整个部门列设置为使用数据验证在每个新记录上显示此列表。每次都有效,效果很好。
问题来了。 Classes 取决于部门。为了简单起见,假设我有 2 个部门(我实际上有大约 40 个部门和 100 个 类):
- 计算机
- 监视器
每个部门都有自己的 类 产品:
- 计算机 = 笔记本电脑、台式机、机架式、服务器
- 显示器 = LCD、CRT、OLED
为了存储这些,我在第二个 sheet 上有 B 列,其中包含 "Computers" 的所有 Classes 并将该列表命名为 "computers"。我在另一个 sheet 的 C 列中列出了三个监视器 类 并将该列表命名为 "monitors"
如果用户为新产品选择部门计算机,下一列 Class 应该显示可能的 类 计算机(笔记本电脑、台式机...)
从我读过的所有内容来看,我应该进行 INDIRECT() 查找...对于列中的单个单元格,我可以很容易地做到这一点。我可以转到第 4 行并单击 Class 单元格并输入此公式进行数据验证:
=INDIRECT($AF)
在这种情况下,"AF4" 是一个计算,其中部门的较低部分用下划线替换名称中的空格(然后我在我的列表中使用相同的命名约定)。例如:
=LOWER(SUBSTITUTE(I17," ","_"))
正如我所解释的,这适用于单个细胞。它不适用于整个列。也就是说,我不能 select 整列并放入该公式...它始终附加到 AF4(或我放入其中的任何内容)。我需要为每一行更改它。
我已经尝试了所有这些 - none 其中有效。
=INDIRECT(OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,4))
=INDIRECT(ADDRESS(ROW(), "AF"))
=INDIRECT(INDIRECT("AF"&ROW()))
几乎每次我都收到一条错误消息说 "The source currently evaluates to an error - Continue?",这意味着它永远不会工作:-(
我希望这些信息足以让 Excel 专家帮助我。
谢谢!
好的,我用你的例子成功了。我在Sheet2的A列输入了部门,B列输入了产品,是这样的:
Computers Laptop
Computers Desktop
Computers Rack Mount
Computers Server
Monitors LCD
Monitors CRT
Monitors OLED
然后我为 A 列设置一个动态命名范围以减少 Excel 上的查找负载。我将范围命名为 "DeptsForProducts"。重要的是,您不仅要为每个产品行重复部门名称,还要对列进行排序,以便计算机部门的所有产品都在一起,显示器行的所有产品都在一起,等等。
然后,return 到您原来的 sheet(我使用 Sheet1;A 列包含部门验证,B 列是我希望显示产品验证的位置)。 Select所有B列,打开数据验证window,将Allow:改为List,输入以下公式:
=OFFSET(Sheet2!$B,MATCH(A1,DeptsForProducts,0)-1,0,COUNTIF(DeptsForProducts,A1))
您将再次收到 "Source currently evaluates to an error" 消息;忽略它并单击是。现在,B 列中任何包含 A 列中的计算机的单元格都将有一个下拉列表,包括笔记本电脑、台式机、机架安装或服务器; B 列中任何带有 A 列监视器的单元格都会有一个 LCD、CRT 或 OLED 下拉列表;任何包含空白或无效部门的单元格将没有可用的下拉列表。
2013 年 Excel 测试。