【问题标题】:Build a dynamic data validation list from several named ranges从多个命名范围构建动态数据验证列表
【发布时间】:2021-12-06 23:07:02
【问题描述】:

我在几个单元格中放置了几个值,如下所示。我已经定义了命名范围:name1 用于 D3,name2 用于 F3,name3 用于 J3,name4 用于 N3。

现在,我想制作一个带有数据验证的单元格;其下拉列表中的值为v1v2v3v4

我希望此数据验证的来源基于命名范围 name1name2name3name4。结果,

  1. 即使单元格的位置发生变化,只要命名范围正确,我们确信下拉列表可以包含正确的值。
  2. 我们可以修改命名范围中的值,下拉列表中的值会自动更新。

有谁知道如何做到这一点?

编辑 1:

为了让这个问题不那么难,让我们假设所有这些命名范围总是在3 行中,而3 行没有其他数据。我试图用=TRANSPOSE(FILTER($3:$3,$3:$3<>"")) 定义另一个命名范围all,结果,单元格中的=all 确实返回了所有值。

但是,我在数据验证源中写了=all,它返回了The Source currently evaluates to an error. Do you want to continue?。点击Yes返回一个空的下拉列表。

我猜可能是因为数据源验证不适用于FILTER 等动态数组函数。有没有人可以尝试另一个具有传统功能的公式(删除列表中的空白)?

【问题讨论】:

  • 您将需要一个帮助列,其中堆叠了四个命名范围,然后引用该范围。
  • 是否可以不在工作表中显示此帮助列(例如,仅在名称管理器中定义它)?
  • 不,它必须在工作表中。但你可以把它放在屏幕外的列中。
  • 或者你可以把它放在一个用户看不到的非常隐蔽的工作表上。
  • 回应您的编辑。数据验证/条件格式从未与数组类型公式一起使用。它已被广泛宣传为“缺陷”,但微软在引入动态数组时并没有“修复”这个问题。所以不,没有公式可以直接做到这一点。您将需要使用帮助列来做您想做的事情。

标签: excel excel-formula


【解决方案1】:

我会创建一个单独的位置(可能像“系统”选项卡)来“存储”临时列表数据。可以这样做:

使用过滤器删除空单元格,如下所示:

=FILTER(D3:N3,D3:N3<>""))

然后转置该输出以使其成为垂直列表:

=TRANSPOSE(FILTER(D3:N3,D3:N3<>""))

现在这是您的价值观的动态列表。现在想想这个列表将来会有多大。目前它是 4 个值,所以让我们假设 10。为这个动态列表保留最多 10 个单元格以允许它增长。现在使用这 10 个单元格作为下拉列表的输入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多