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 中的列表:
在 Sheet1 的 S 列 select S2:S200 中,当它们全部 selected 时,请输入此数组公式(确保您按 Shift Control Enter 而不是输入后输入):
=IF(($M:$M0<>""),$M:$M0,"")
在 T2 中输入此数组公式(确保在输入后按 Shift Control Enter 而不是 Enter):
=IF(SUM(IF(S2=T:T1,1,0)),"",S2)
将T2复制到T3:T200
在 U2 中输入此数组公式(确保在输入后按 Shift Control Enter 而不是 Enter):
=IFERROR(INDEX(T:T0, SMALL(IF(T:T0="", "", ROW(T:T0)-MIN(ROW(T:T0))+1), ROW($A1))), "")
将U2复制到U3:U200
将名称 List1 定义为:
=OFFSET(Sheet1!$U:$U0,0,0,200-1-COUNTBLANK(Sheet1!$U:$U0),1)
最后将 Sheet2!B1 上的数据验证更改为:
=List1
从 Sheet2!B1 筛选列表 2 的不同值的关系中获取 Sheet2!B2 中的列表:
在 Sheet1 的 W 列 select W2:W200 中,当它们都被 select 编辑时,输入此数组公式(确保您按 Shift Control Enter 而不是输入后输入):
=IF(($M:$M0=Sheet2!$B),$N:$N0,"")
在 X2 中输入此数组公式(确保在输入后按 Shift Control Enter 而不是 Enter):
=IF(SUM(IF(W2=X:X1,1,0)),"",W2)
将 X2 复制到 X3:X200
在 Y2 中输入此数组公式(确保在输入后按 Shift Control Enter 而不是 Enter):
=IFERROR(INDEX(X:X0, SMALL(IF(X:X0="", "", ROW(X:X0)-MIN(ROW(X:X0))+1), ROW($A1))), "")
将 Y2 复制到 Y3:Y200
将名称 List2 定义为:
=OFFSET(Sheet1!$Y:$Y0,0,0,200-1-COUNTBLANK(Sheet1!$Y:$Y0),1)
最后将 Sheet2!B2 上的数据验证更改为:
=List2
从 Sheet2!B1 和 Sheet2!B2 过滤列表 3 的不同值的关系中获取 Sheet2!B3 中的列表:
在 Sheet1 的 AA 列 select AA2:AA200 中,当它们都被 select 编辑时,输入此数组公式(确保您按 Shift Control Enter 而不是输入后输入):
=IF(($M:$M0=Sheet2!$B)*($N:$N0=Sheet2!$B),$O:$O0,"")
在 AB2 中输入此数组公式(确保在输入后按 Shift Control Enter 而不是 Enter):
=IF(SUM(IF(AA2=AB:AB1,1,0)),"",AA2)
复制AB2到AB3:AB200
在 AC2 中输入此数组公式(确保在输入后按 Shift Control Enter 而不是 Enter):
=IFERROR(INDEX(AB:AB0, SMALL(IF(AB:AB0="", "", ROW(AB:AB0)-MIN(ROW(AB:AB0))+1), ROW($A1))), "")
将AC2复制到AC3:AC200
将名称 List3 定义为:
=OFFSET(Sheet1!$AC:$AC0,0,0,200-1-COUNTBLANK(Sheet1!$AC:$AC0),1)
最后将 Sheet2!B3 上的数据验证更改为:
=List3
从 Sheet2!B1、Sheet2!B2 和 Sheet2!B3 的不同值关系中获取 Sheet2!B4 中的列表:
在 Sheet1 的 AE select AE2:AE200 列中,虽然它们都是 selected,但请输入此数组公式(确保您按 Shift Control Enter 而不是输入后输入):
=IF(($M:$M0=Sheet2!$B)*($N:$N0=Sheet2!$B)*($O:$O0=Sheet2!$B),$Q:$Q0,"")
在 AF2 中输入此数组公式(确保在输入后按 Shift Control Enter 而不是 Enter):
=IF(SUM(IF(AE2=AF:AF1,1,0)),"",AE2)
复制AF2到AF3:AF200
在 AG2 中输入此数组公式(确保在输入后按 Shift Control Enter 而不是 Enter):
=IFERROR(INDEX(AF:AF0, SMALL(IF(AF:AF0="", "", ROW(AF:AF0)-MIN(ROW(AF:AF0))+1), ROW($A1))), "")
复制AG2到AG3:AG200
定义名称 Order 为:
=OFFSET(Sheet1!$AG:$AG0,0,0,200-1-COUNTBLANK(Sheet1!$AG:$AG0),1)
最后将 Sheet2!B4 上的数据验证更改为:
=Order
如果我能找到上传示例电子表格的地方,我将使用 link...
编辑答案
我正在尝试从不同 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 中的列表:
在 Sheet1 的 S 列 select S2:S200 中,当它们全部 selected 时,请输入此数组公式(确保您按 Shift Control Enter 而不是输入后输入):
=IF(($M:$M0<>""),$M:$M0,"")
在 T2 中输入此数组公式(确保在输入后按 Shift Control Enter 而不是 Enter):
=IF(SUM(IF(S2=T:T1,1,0)),"",S2)
将T2复制到T3:T200
在 U2 中输入此数组公式(确保在输入后按 Shift Control Enter 而不是 Enter):
=IFERROR(INDEX(T:T0, SMALL(IF(T:T0="", "", ROW(T:T0)-MIN(ROW(T:T0))+1), ROW($A1))), "")
将U2复制到U3:U200
将名称 List1 定义为:
=OFFSET(Sheet1!$U:$U0,0,0,200-1-COUNTBLANK(Sheet1!$U:$U0),1)
最后将 Sheet2!B1 上的数据验证更改为:
=List1
从 Sheet2!B1 筛选列表 2 的不同值的关系中获取 Sheet2!B2 中的列表:
在 Sheet1 的 W 列 select W2:W200 中,当它们都被 select 编辑时,输入此数组公式(确保您按 Shift Control Enter 而不是输入后输入):
=IF(($M:$M0=Sheet2!$B),$N:$N0,"")
在 X2 中输入此数组公式(确保在输入后按 Shift Control Enter 而不是 Enter):
=IF(SUM(IF(W2=X:X1,1,0)),"",W2)
将 X2 复制到 X3:X200
在 Y2 中输入此数组公式(确保在输入后按 Shift Control Enter 而不是 Enter):
=IFERROR(INDEX(X:X0, SMALL(IF(X:X0="", "", ROW(X:X0)-MIN(ROW(X:X0))+1), ROW($A1))), "")
将 Y2 复制到 Y3:Y200
将名称 List2 定义为:
=OFFSET(Sheet1!$Y:$Y0,0,0,200-1-COUNTBLANK(Sheet1!$Y:$Y0),1)
最后将 Sheet2!B2 上的数据验证更改为:
=List2
从 Sheet2!B1 和 Sheet2!B2 过滤列表 3 的不同值的关系中获取 Sheet2!B3 中的列表:
在 Sheet1 的 AA 列 select AA2:AA200 中,当它们都被 select 编辑时,输入此数组公式(确保您按 Shift Control Enter 而不是输入后输入):
=IF(($M:$M0=Sheet2!$B)*($N:$N0=Sheet2!$B),$O:$O0,"")
在 AB2 中输入此数组公式(确保在输入后按 Shift Control Enter 而不是 Enter):
=IF(SUM(IF(AA2=AB:AB1,1,0)),"",AA2)
复制AB2到AB3:AB200
在 AC2 中输入此数组公式(确保在输入后按 Shift Control Enter 而不是 Enter):
=IFERROR(INDEX(AB:AB0, SMALL(IF(AB:AB0="", "", ROW(AB:AB0)-MIN(ROW(AB:AB0))+1), ROW($A1))), "")
将AC2复制到AC3:AC200
将名称 List3 定义为:
=OFFSET(Sheet1!$AC:$AC0,0,0,200-1-COUNTBLANK(Sheet1!$AC:$AC0),1)
最后将 Sheet2!B3 上的数据验证更改为:
=List3
从 Sheet2!B1、Sheet2!B2 和 Sheet2!B3 的不同值关系中获取 Sheet2!B4 中的列表:
在 Sheet1 的 AE select AE2:AE200 列中,虽然它们都是 selected,但请输入此数组公式(确保您按 Shift Control Enter 而不是输入后输入):
=IF(($M:$M0=Sheet2!$B)*($N:$N0=Sheet2!$B)*($O:$O0=Sheet2!$B),$Q:$Q0,"")
在 AF2 中输入此数组公式(确保在输入后按 Shift Control Enter 而不是 Enter):
=IF(SUM(IF(AE2=AF:AF1,1,0)),"",AE2)
复制AF2到AF3:AF200
在 AG2 中输入此数组公式(确保在输入后按 Shift Control Enter 而不是 Enter):
=IFERROR(INDEX(AF:AF0, SMALL(IF(AF:AF0="", "", ROW(AF:AF0)-MIN(ROW(AF:AF0))+1), ROW($A1))), "")
复制AG2到AG3:AG200
定义名称 Order 为:
=OFFSET(Sheet1!$AG:$AG0,0,0,200-1-COUNTBLANK(Sheet1!$AG:$AG0),1)
最后将 Sheet2!B4 上的数据验证更改为:
=Order
如果我能找到上传示例电子表格的地方,我将使用 link...
编辑答案