Excel 数据验证列表依赖于多个表

Excel Data Validation List dependent on Multiple Tables

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

从左到右它们是 Table:List1、List2、List3、关系

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

所以我设置的第一个单元格为您提供 List1 Table.

中的列表

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

SELECT DISTINCT L2 FROM Relations WHERE L1=3;

然后第三个细胞会相似,但取决于前 2 个细胞的 selection。

SQL 类似于:

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

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

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

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

你不需要你的List1、List2和List3,你可以从关系table中获得一切。如果你确实从关系 table 中获得了所有内容,你只需要更新一个 table.

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

  1. 在 Sheet1 的 S 列 select S2:S200 中,当它们全部 selected 时,请输入此数组公式(确保您按 Shift Control Enter 而不是输入后输入):

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

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

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

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

  6. 将名称 List1 定义为:

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

    =List1
    

从 Sheet2!B1 筛选列表 2 的不同值的关系中获取 Sheet2!B2 中的列表:

  1. 在 Sheet1 的 W 列 select W2:W200 中,当它们都被 select 编辑时,输入此数组公式(确保您按 Shift Control Enter 而不是输入后输入):

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

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

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

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

  6. 将名称 List2 定义为:

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

    =List2
    

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

  1. 在 Sheet1 的 AA 列 select AA2:AA200 中,当它们都被 select 编辑时,输入此数组公式(确保您按 Shift Control Enter 而不是输入后输入):

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

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

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

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

  6. 将名称 List3 定义为:

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

    =List3
    

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

  1. 在 Sheet1 的 AE select AE2:AE200 列中,虽然它们都是 selected,但请输入此数组公式(确保您按 Shift Control Enter 而不是输入后输入):

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

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

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

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

  6. 定义名称 Order 为:

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

    =Order
    

如果我能找到上传示例电子表格的地方,我将使用 link...

编辑答案