Excel - 从数据表中提取值以进行列表验证

时间:2017-02-05 20:09:07

标签: excel vba list excel-vba validation

背景

我有一个完全按照自己的意愿执行的工作簿/工具。

该工具包括两个主要组成部分:

  1. 按类别分组的成分列表(即乳制品,农产品等)
  2. 带有食谱表的工作表
  3. 在配料表上,特定类别的所有成分被组合在一起作为命名范围的一部分(即" dairy_list")。

    [Named Rage: Dairy_list]
    
      [Ingredient] [Unit]    [Price]
      Milk, 2%     1 litre   $2.50
      Milk, Whole  1 litre   $3.50
    
    [/Named Rage: Dairy_list]
    [Named Rage: Fruit_list]
    
      [Ingredient] [Unit]    [Price]
      Apples       pound     $0.99
      Bananas      pound     $1.99
    
    [/Named Rage: Fruit_list]
    

    食谱表包含每种成分的一行(注意:一旦模型完成,可能会有数百个成分行)。在每一行中有两列,第一行包含一个列表验证下拉菜单,其中包含所有类别的名称,第二列是一个列表验证下拉列表,其中包含所选类别中的所有成分。我使用命名范围和INDIRECT([category cell]&" _list")函数进行列表验证。所以如果类别" Dairy"如果选择了,验证列表将是" Dairy_list"。

    这有效;但是,从可用性角度来看存在一些挑战。

    挑战:

    此工具的用户没有Excel经验。用户必须能够轻松地向每个类别添加行并向模型添加类别。

    解释如何定义命名范围,在范围内插入行并确保范围'命名约定有效对于有经验的用户来说都是相对简单的任务,但对于该工具的许多预期用户而言并非如此。

    用户还可能希望以不同的方式对成分列表进行排序(使用自动过滤器),当表格分为子组和类别时,这是不可能的。

    我正在重建模型模板以实现这种可用性并简化用户体验。

    目的:

    配料数据表的格式为单一,可排序的表格:

    [Category] [Ingredient]
    Fruit      Apple
    Fruit      Banana
    Vegetable  Carrot
    Fruit      Melon
    

    可能类别的命名范围将包含在单独的表格中。

    理想情况下,用户只需要在类别列表中添加一个类别或将一个组件添加到ingrdient列表中,除了填充配方之外不需要进一步的步骤。

    用户应该能够根据需要添加(在合理范围内)多个类别。类似地,在成分表上,用户可以(在合理范围内)为每个类别和他们希望的任何顺序添加尽可能多的成分。这很重要,因为我在此站点上找到的解决方案以及其他用于动态验证列表的解决方案通常涉及创建一个额外的列表/命名范围,按类别对列表项进行分组,然后将命名范围应用于每个列表。

    [Fruit] [Vegetables]
    Apple   Carrot
    Banana  
    Melon
    

    这种方法虽然功能相关,但本质上是一个不太优雅的版本(数据必须位于多个位置),我当前的模型使用的是我想要避免的一个(我想避免尽可能多的步骤)用户)。

    我希望模型在配方表中执行的操作是,只要类别单元格包含[Fruit],配料单元格只会列出[类别]为Fruit的成分列表中的项目。但不要求在成分列表中手动提取或分组数据。

    我已尝试过VBA自动过滤功能,但如果用户已按可用性排序某种方式,我不想更改配料列表中的过滤器,格式或订购设置。

    如果我用另一种引用数据库的编程语言来构造它,那么等效的功能将是一个SQL语句,例如" SELECT [成分] FROM [Ingredient_List] WHERE [Category] ​​=' Fruit&#39 ;&#34 ;.

    我对VBA或非VBA解决方案持开放态度(最好是相对向后兼容的解决方案,因为我无法控制Excel版本)。

    提前感谢您的任何想法/方向/资源/解决方案。

0 个答案:

没有答案