在没有VBA的情况下在Excel中更新动态下拉列表

时间:2019-01-22 14:11:33

标签: excel excel-formula

我想在excel中创建2个相关的下拉列表,第一个下拉值决定了第二个下拉列表必须显示的值。

将以下OFFSET公式用于第二个下拉值,以动态填充。

  

= OFFSET($ B $ 2,MATCH($ G $ 3,$ B $ 3:$ B $ 17,0),1,COUNTIF($ B $ 3:$ B $ 17,$ G $ 3),1)

。我还准备了一个示例文件,展示了我使用的公式。

当我选择第一个下拉值时,第二个下拉列表将得到更新。但是,当我在第一个下拉列表中选择另一个值时,第二个列表不会立即显示这些值。

示例文件链接-https://drive.google.com/file/d/1rwt6B-INgrQ0NgxIl-Nc8JeoGziBaiL2/view?usp=sharing

2 个答案:

答案 0 :(得分:2)

现在,这就是我所说的具有挑战性的要求。
我们将使用秘密的Evaluate公式来实现这一目标。

免责声明:

  • 确保状态永远不会与对等方分离(例如,不要在表的末尾添加另一个“新建”,而要插入一列以使状态保留在包中)。
  • 请注意,更改状态不会清除定义单元格。简单的VBA可以解决问题(这是您唯一需要VBA的地方)。

解决方案:

  1. 让我们创建一个公式,该公式返回我们要在下拉菜单中使用的范围的地址。您可以将其粘贴为I3。
    =ADDRESS(ROW(OFFSET($C$2,MATCH($G3,$B$3:$B$17,0),0)), COLUMN($C$2)) & ":" & ADDRESS(ROW(OFFSET($C$2,MATCH($G3,$B$3:$B$17,0)+COUNTIF($B$3:$B$17,$G3)-1,0)),COLUMN($C$2))
    如果我的法语Excel没错,则应该获取在G3中放置的状态的所有定义的地址。将公式向下扩展几行,您将看到它始终与G4,G5等匹配。

  2. 是时候定义一个名称了(菜单公式>名称管理器>新建),我们将其称为DynamicRange。
    首先,我建议将范围更改为工作表(窗口中的“ Dropdown”)。
    接下来,将我们之前尝试过的公式放在EVALUATE中。
    =EVALUATE(ADDRESS(ROW(OFFSET($C$2,MATCH($G3,$B$3:$B$17,0),0)), COLUMN($C$2)) & ":" & ADDRESS(ROW(OFFSET($C$2,MATCH($G3,$B$3:$B$17,0)+COUNTIF($B$3:$B$17,$G3)-1,0)),COLUMN($C$2)))

这是什么样子(除了我全是法语...) New range created

  1. 返回数据验证,然后在列表的来源中,只需键入=DynamicRange

成功完成上述操作后,即可轻松定义列表。 Definition of the list

答案 1 :(得分:-1)

我看到了您要完成的工作(获取第二个单元格值以自动更新到第一个列表项),但是我认为不使用VBA是不可能的。

我的理解是“数据验证”仅验证单元格中的数据,而不会更改现有值。

如果您想更改现有值,那么我将研究VBA。