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

时间:2015-02-20 20:41:25

标签: excel validation

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

enter image description here

从左到右,它们是表格: List1,List2,List3,Relations

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

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

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

SELECT DISTINCT L2 FROM Relations WHERE L1=3;

然后第三个细胞将是相似的,但取决于前两个细胞的选择。

SQL类似于:

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

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

1 个答案:

答案 0 :(得分:0)

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

此答案假定您正在为列表使用数据验证。它假设您的屏幕截图中的数据位于Sheet1上,而列表1,列表2,列表3和订单中具有数据值的单元格分别位于Sheet2!B1:B4中。

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

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

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

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

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

  4. 在U2中输入此数组公式(确保在输入后按Shift Shift 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
    
  8. 获取Sheet2中的列表!B2来自Sheet2过滤的List 2的不同值的关系!B1:

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

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

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

    4. 在Y2中输入此数组公式(确保在键入后按Shift Shift 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
      
    8. 获取Sheet2中的列表!B3来自Sheet2过滤的List 3的不同值的关系!B1和Sheet2!B2:

      1. 在AA栏的Sheet1上选择AA2:AA200,当它们全部被选中时,输入此数组公式(确保在输入后按Shift Shift Enter而不是Enter):

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

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

      4. 在AC2中输入此数组公式(确保在键入后按Shift Shift 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
        
      8. 获取Sheet2中的列表!B4来自Sheet2的订单过滤的不同值的关系!B1,Sheet2!B2和Sheet2!B3:

        1. 在AE列中的Sheet1上选择AE2:AE200,当它们全部被选中时,输入此数组公式(确保在键入后按Shift Shift 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 Shift Enter而不是Enter):

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

        4. 在AG2中输入此数组公式(确保在键入后按Shift Shift 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. 将名称定义为:

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

          =Order
          
        8. 如果我可以找出上传我的示例电子表格的地方,我会用链接编辑答案......

相关问题