【问题标题】:Excel Data Validation List dependent on Multiple TablesExcel 数据验证列表依赖于多个表
【发布时间】:2015-02-20 20:41:25
【问题描述】:

我正在尝试从不同表中信息的下拉列表中找到一种方法来进行动态数据验证。我的表格的简化版本是:

从左到右分别是:List1、List2、List3、Relationship

在单独的工作簿上,我希望有一个下拉列表,以便您可以选择适当的输入。

所以我设置的第一个单元格为您提供 List1 表中的列表。

现在是我的问题。第二个单元格我想从 Relations 表中提取所有不同的值。 SQL 类似于:

SELECT DISTINCT L2 FROM Relations WHERE L1=3;

那么第三个单元格将是相似的,但取决于前两个单元格的选择。

SQL 类似于:

SELECT DISTINCT L3 FROM Relations WHERE L1=3 AND L2=0;

关于如何实现这一点的任何想法或想法?

【问题讨论】:

  • 我想我已经找到了一种方法(使用辅助列)。您的“下拉列表”数据验证列表或组合框是否插入到工作表中?

标签: excel validation


【解决方案1】:

我有办法使用辅助列来做到这一点。这并不理想,希望其他人发布一个只需一个公式即可完成的答案。在此期间您可以使用它。

此答案假定您正在对列表使用数据验证。它假定您的屏幕截图中的数据位于 Sheet1 中,并且对 List 1、List 2、List 3 和 Order 进行数据验证的单元格分别位于 Sheet2!B1:B4 中。

您不需要您的 List1、List2 和 List3,您可以从关系表中获取所有内容。如果您确实从关系表中获取所有内容,则只需更新一个表。

从列表 1 的不同值的关系中获取 Sheet2!B1 中的列表:

  1. 在 S 列的 Sheet1 上选择 S2:S200 并在它们都被选中时输入此数组公式(确保在输入后按 Shift Control Enter 而不是 Enter):

    =IF(($M$2:$M$200<>""),$M$2:$M$200,"")
    
  2. 在 T2 中输入此数组公式(确保在键入后按 Shift Control Enter 而不是 Enter):

    =IF(SUM(IF(S2=T$1:T1,1,0)),"",S2)
    
  3. 将 T2 复制到 T3:T200

  4. 在 U2 中输入此数组公式(确保在输入后按 Shift Control Enter 而不是 Enter):

    =IFERROR(INDEX(T$2:T$200, SMALL(IF(T$2:T$200="", "", ROW(T$2:T$200)-MIN(ROW(T$2:T$200))+1), ROW($A1))), "")
    
  5. 将 U2 复制到 U3:U200

  6. 将名称 List1 定义为:

    =OFFSET(Sheet1!$U$2:$U$200,0,0,200-1-COUNTBLANK(Sheet1!$U$2:$U$200),1)
    
  7. 最后将 Sheet2!B1 上的数据验证更改为:

    =List1
    

从通过 Sheet2!B1 过滤的 List 2 的不同值的关系中获取 Sheet2!B2 中的列表:

  1. 在 W 列的 Sheet1 上选择 W2:W200 并在它们都被选中时输入此数组公式(确保在输入后按 Shift Control Enter 而不是 Enter):

    =IF(($M$2:$M$200=Sheet2!$B$1),$N$2:$N$200,"")
    
  2. 在 X2 中输入此数组公式(确保在输入后按 Shift Control Enter 而不是 Enter):

    =IF(SUM(IF(W2=X$1:X1,1,0)),"",W2)
    
  3. 将 X2 复制到 X3:X200

  4. 在 Y2 中输入此数组公式(确保在输入后按 Shift Control Enter 而不是 Enter):

    =IFERROR(INDEX(X$2:X$200, SMALL(IF(X$2:X$200="", "", ROW(X$2:X$200)-MIN(ROW(X$2:X$200))+1), ROW($A1))), "")
    
  5. 将 Y2 复制到 Y3:Y200

  6. 将名称 List2 定义为:

    =OFFSET(Sheet1!$Y$2:$Y$200,0,0,200-1-COUNTBLANK(Sheet1!$Y$2:$Y$200),1)
    
  7. 最后将 Sheet2!B2 上的数据验证更改为:

    =List2
    

从通过 Sheet2!B1 和 Sheet2!B2 过滤的 List 3 的不同值的关系中获取 Sheet2!B3 中的列表:

  1. 在 AA 列的 Sheet1 中选择 AA2:AA200 并在它们都被选中时输入此数组公式(确保在输入后按 Shift Control Enter 而不是 Enter):

    =IF(($M$2:$M$200=Sheet2!$B$1)*($N$2:$N$200=Sheet2!$B$2),$O$2:$O$200,"")
    
  2. 在 AB2 中输入此数组公式(确保在键入后按 Shift Control Enter 而不是 Enter):

    =IF(SUM(IF(AA2=AB$1:AB1,1,0)),"",AA2)
    
  3. 将 AB2 复制到 AB3:AB200

  4. 在 AC2 中输入此数组公式(确保在输入后按 Shift Control Enter 而不是 Enter):

    =IFERROR(INDEX(AB$2:AB$200, SMALL(IF(AB$2:AB$200="", "", ROW(AB$2:AB$200)-MIN(ROW(AB$2:AB$200))+1), ROW($A1))), "")
    
  5. 将 AC2 复制到 AC3:AC200

  6. 将名称 List3 定义为:

    =OFFSET(Sheet1!$AC$2:$AC$200,0,0,200-1-COUNTBLANK(Sheet1!$AC$2:$AC$200),1)
    
  7. 最后将 Sheet2!B3 上的数据验证更改为:

    =List3
    

通过 Sheet2!B1、Sheet2!B2 和 Sheet2!B3 从不同值的关系中获取 Sheet2!B4 中的列表:

  1. 在 AE 列中的 Sheet1 上选择 AE2:AE200 并在它们都被选中时输入此数组公式(确保在输入后按 Shift Control Enter 而不是 Enter):

    =IF(($M$2:$M$200=Sheet2!$B$1)*($N$2:$N$200=Sheet2!$B$2)*($O$2:$O$200=Sheet2!$B$3),$Q$2:$Q$200,"")
    
  2. 在 AF2 中输入此数组公式(确保在键入后按 Shift Control Enter 而不是 Enter):

    =IF(SUM(IF(AE2=AF$1:AF1,1,0)),"",AE2)
    
  3. 将 AF2 复制到 AF3:AF200

  4. 在 AG2 中输入此数组公式(确保在输入后按 Shift Control Enter 而不是 Enter):

    =IFERROR(INDEX(AF$2:AF$200, SMALL(IF(AF$2:AF$200="", "", ROW(AF$2:AF$200)-MIN(ROW(AF$2:AF$200))+1), ROW($A1))), "")
    
  5. 将 AG2 复制到 AG3:AG200

  6. 将名称 Order 定义为:

    =OFFSET(Sheet1!$AG$2:$AG$200,0,0,200-1-COUNTBLANK(Sheet1!$AG$2:$AG$200),1)
    
  7. 最后将 Sheet2!B4 上的数据验证更改为:

    =Order
    

如果我能找到上传我的示例电子表格的地方,我将使用链接编辑答案...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 1970-01-01
    • 2021-08-14
    • 2015-04-07
    • 1970-01-01
    相关资源
    最近更新 更多