Excel:下拉列表取决于另一个下拉列表

时间:2013-11-13 14:03:26

标签: excel drop-down-menu

我想在Excel中使用以下内容:

相邻单元格中的两个下拉列表:

下拉列表#1 |下拉列表#1

Dropdown list 1:
One
Two
Three

如果我在第一个单元格中选择One,则第二个单元格中的列表应包含以下选项:

One:<br/>
1.1<br/>
1.2<br/>
1.3

如果我在第一个单元格中选择Two,则第二个单元格中的列表应包含以下选项:

Two:<br/>
2.1<br/>
2.2

等等。有很多教程,但我有一些麻烦搞清楚哪些解决了这个问题。

更新:一个例子。选择f.ex.时在集团标题(第A组)下的第1组,在第1组右侧(第D组)下列出的条目应出现在项目标题下(文字B)。其他小组也一样。

enter image description here

2 个答案:

答案 0 :(得分:3)

按照承诺更新:

当您使用List进行验证时,您必须输入一个范围,如下所示。

Excel2

OFFSET功能允许根据输入条件动态设置范围。

如果你考虑这个:

=OFFSET(C1,0,0,1,1)
  • 参数1 =锚定单元
  • 参数2 =要移动的行数,您可以在此处使用减号来向上移动行,向下移动正数
  • 参数3 =要移动的列数。左边是负面,右边是正面。
  • 参数4 =范围的高度(不能为负数且可选,默认为1)
  • 参数5 =范围的宽度(不能为负数且可选,默认为1)

在这种情况下,返回的范围是C1,因为我们没有行或列偏移,高度和宽度设置为1

MATCH函数将返回一个值出现在一系列单元格中的索引(范围必须是1个单元格宽或1个单元格高)

Cell Screenprint

根据以上屏幕打印=MATCH("Group2",D1:F1,0)将返回2,因为“Group2”出现在D1:F1范围内的第二个单元格中。 (“Group1”将返回1,“Group3”将返回3,“Group4”将返回#N / A,因为它不存在)。

基于此,我们可以将MATCH函数作为OFFSET函数中的第二个参数,并选择与MATCH函数中第一个参数匹配的列。 / p>

=OFFSET(C1,0,MATCH("Group2",D1:F1,0),1,1)会返回范围E1,因为C1

我们已经将列从MATCH移了2

=OFFSET(C1,1,MATCH("Group2",D1:F1,0),3,1)现在将返回E2:E4,因为我们已将范围的高度增加到3,行偏移为1。

最后我们可以将MATCH函数中的“Group2”值更改为一个单元格值,这意味着该范围将动态变化。

此处我使用了单元格A2 =OFFSET(C1,1,MATCH(A2,D1:F1,0),3,1),因此单元格A2中的任何值都将用于抵消范围。

最后要做的是将动态范围放入验证中(我使用B2

Validation Example

这将动态设置验证范围。

Validation Range

当我使用带有多个参数的OFFSET函数并且我不确定它是否返回正确的范围时,我写了一个小助手用户定义函数,我刚刚放入VBA模块。

Public Function GetAddress(rng As Range) As String
GetAddress = rng.Address
End Function

这允许我将偏移公式放入,它将返回范围地址。所以我可以确保它是正确的。

Get Address Example

可能有内置功能,但我从未找到它。

答案 1 :(得分:0)

此解决方案避免使用易失性OFFSET函数。

对于位于Validation的第一个数据A2,请使用以下公式:

=$D$1:$F$1

对于位于Validation的第二个数据B2,请使用以下公式:

= INDEX( $D$2:$F$4, 0, MATCH( $A$2, $D$1:$F$1, 0 ) )

第二个公式使用从Validation中的数据A2MATCH中相应列的D1:F1中选择的值,并将列号应用于{{1} }函数返回范围INDEX中的整个列。

enter image description here

函数D2:F4通过输入0作为INDEX( reference, row number, column number )column返回row的整个referencerow number