【问题标题】:Is there a way to generate dynamic excel data validation lists based on source table?有没有办法根据源表生成动态excel数据验证列表?
【发布时间】:2021-06-05 14:33:27
【问题描述】:

我有两个工作簿,一个是验证数据的来源(源工作簿),另一个是用于填写值(订单工作簿)。

在源工作簿 Sheet1 中,我有一个包含这样数据的表格(可以有更多的纸张和克数组合)

在订单工作簿中(如果填写了实际订单),我使用数据验证和命名表结合对源工作簿的引用。

在源工作簿中,我需要基于为每一行输入的 Paper 的 Grams 数据验证列表,这里是 NovaPress Gloss 的示例,我们只看到三个选择:

使用 ArcticSilk+,我们看到 5:

这些下拉列表经过硬编码以显示我需要完成的内容。

总而言之,我需要基于其他单元格值的动态数据验证列表,该单元格值与每个输入订单(I、II、II 等)的源工作簿表中的值相同。

我设法找到的只是这个相当不错的答案Advanced Dynamic Validation Lists in Excel,但它使用中间表作为“动态”列表,就我而言,我需要有许多独立的列表。

这是否可以仅使用 excel 功能或需要一些 VBA 代码来实现?感谢所有帮助

【问题讨论】:

  • 据我了解,如果关闭了引用的工作簿,INDIRECT 将不起作用。这意味着您将需要使用非动态的直接链接。我通常会在同一个工作簿中包含验证列表表,以便我可以使用 INDIRECT 创建动态验证列表。
  • 嗨,引用的 workoob(源)将自动打开,因此我可以在我的数据验证列表中使用它的数据。问题是我不知道如何实现我在问题中描述的此类功能。
  • 我只知道如何设置一行的动态下拉列表。您想要的结果是任何数量的行,这似乎很难实现。
  • 如果您可以为每个产品的 GSM 范围制作单独的列表,并将这些列表与订单表单放在同一个工作簿中,那么有一种方法可以在每个产品的订单表中制作动态列表产品线。让我知道是否可以满足上述条件,您很高兴看到基于此的解决方案。
  • 感谢您的回复。是的,可以根据论文名称将源数据分成许多表。最好将源表放在 Source 工作簿中,但如果不可能,我们可能会将其放在 Order 工作簿中。

标签: excel validation dynamic


【解决方案1】:

假设在同一个工作簿中,您有以下两个结构化参考表

  1. GSM - 这是保存每个纸制品的 GSM 数据的表格,结构如下:

  1. Order - 这是您从每个纸制品的动态数据验证列表中选择 GSM 的表格:

首先,您需要使用以下公式设置一个名为List_GSM命名范围

=XLOOKUP(Order[@Product],GSM[#Headers],GSM)

请注意,如果您的 Excel 版本无法使用 XLOOKUP,您可以使用 INDEX + MATCH 的组合来获取同类产品中每个产品的 GSM 范围方式。

=INDEX(GSM,,MATCH(Order[@Product],GSM[#Headers],0))

其次,使用Order表的GSM列中的命名范围List_GSM设置下拉列表:

您可以在第一个空单元格中设置它,然后将其向下拖动以应用于该列中的所有单元格。

下拉列表会在第一列查找产品名称,并从GSM表中返回对应的GSM列表。

此方法的关键是确保Order 表的产品名称与GSM 表的标题相同。您可以使用 power query 来透视您的源表或手动设置 GSM 表,以便产品名称位于标题中。

使用结构化参考表的一个明显优势是您可以使用新的产品数据更新源表。 Order 表中的下拉列表将动态更新。请看下面的例子:

如果您有任何问题,请告诉我:)

【讨论】:

  • 感谢您提供如此详细的回复,按描述工作。我必须尝试解决的一件事是空白条目。有些论文可能有 3 个选择,而有些则 30 个。
  • @MisterWhite,我想这是此方法的另一个限制,即您无法隐藏空白,因为您不能拥有每列具有不同行号的表格。如果您碰巧遇到更好的解决方案,请在此处分享。干杯。
  • 最后设法通过以下行中的偏移函数解决了“空”行:=OFFSET(<Index function provided by you>,0,0,COUNTA(<index function provided by you>))。可以改进 OFFSET 的第一个参数以进行更优化,但这仍然有效。
  • @Mister White 感谢您让我知道。如果您使用的是 Excel 365,则可以使用 LET 函数通过将 INDEX 函数声明为 X 来简化 OFFSET 函数,然后在 OFFSET 函数中使用 X。
猜你喜欢
  • 1970-01-01
  • 2013-11-12
  • 2020-02-28
  • 2012-03-27
  • 1970-01-01
  • 2015-03-27
  • 1970-01-01
  • 2023-01-12
  • 2021-02-24
相关资源
最近更新 更多