【问题标题】:Conditional/cascading/dependent drop-down list条件/级联/依赖下拉列表
【发布时间】:2016-04-05 16:08:08
【问题描述】:

我实际上是在尝试做这个人正在尝试做的事情: Excel drop-down list using vLookup

我已经完成了这些步骤,由于我的数据集有大约 400 个不同的下拉选项,我希望有比命名范围更简单的方法。我有一个大约 400 个不同帐户名称的列表。这些帐户名称中的每一个都与一个家庭相关联,并由家庭 ID 号标识。一个家庭可以有 1-5 个帐户名称。我希望我的下拉菜单能够识别家庭身份证号码,然后在下拉菜单中提供与之关联的帐户名称。

例子:

其中家庭身份证号码是标识符。

我也去过这里http://sites.madrocketscientist.com/jerrybeaucaires-excelassistant/data-validation/dynamic-indirect 并试图找到一种方法来节省一些手工工作。我是一个完全的新手,所以提前感谢您提供的任何帮助。

【问题讨论】:

    标签: list validation excel excel-formula vba


    【解决方案1】:

    假设您有三个工作表。第一个工作表Sheet1 是您的用户将要查看的工作表,它具有下拉列表。我们会说包含第一个下拉选项的单元格在 B1 中(具有大约 400 个不同选项的单元格),包含相关下拉选项的单元格在 B2 中:

    在您的第二张工作表上,我们称之为MasterList,是所有数据选项和相应的数据。第 1 行是标题行;第 2 行以下是实际数据:

    在您的第三张纸上,我们称之为DropDownLists,是魔法发生的地方。它首先需要有一个所有唯一数据选项的列表。我已将其放在 A 列中。您可以通过您喜欢的任何方式(高级过滤器、数据透视表、公式、VBA 等)从主列表中获取唯一数据选项。该唯一数据选项列表是 Sheet1 单元格 B1 下拉列表的基础。然后在DropDownLists 的单元格 B2 中并根据需要向下复制以保证它会抓取与所选数据选项关联的所有数据,使用此公式(调整工作表名称和范围以适合您的实际数据):

    =IF(OR(Sheet1!$B$1="",ROW(B1)>COUNTIF(MasterList!$A$2:$A$10000,Sheet1!$B$1)),"",INDEX(MasterList!$B$2:$B$10000,MATCH(1,INDEX((MasterList!$A$2:$A$10000=Sheet1!$B$1)*(COUNTIF(B$1:B1,MasterList!$B$2:$B$10000)=0),),0)))
    

    这会使您的DropDownLists 工作表看起来像这样:

    最后,我们需要将该列表(基于所选数据选项的数据)设为动态命名范围。我将它命名为listFilteredData 并用这个公式定义它:

    =DropDownLists!$B$2:INDEX(DropDownLists!$B:$B,MAX(2,ROWS(DropDownLists!$B:$B)-COUNTBLANK(DropDownLists!$B:$B)))
    

    然后对于Sheet1 单元格B2,使用数据验证并使用=listFilteredData 定义列表,您将获得如我的示例所示的结果。

    【讨论】:

    • 非常感谢您抽出宝贵的时间来解决这个问题。我遇到的问题是我的 ID 号附加到多个数据点。例如,一个家庭可能有 2 个或 3 个不同的帐户,并且每个帐户当前都由家庭 ID 号标记。使用您为 DropDownLists 表提供的第一个公式,我只能获得与家庭 ID 号关联的第一个帐户名称。提前感谢您提供的任何其他指导。
    • @Jmrunnels 我必须查看一些示例数据。您可以编辑原始问题以包含您的数据的样子吗?
    • 对原始问题的修改。再次感谢您的帮助。
    • @Jmrunnels 我已经编辑了答案以说明您提供的示例数据。请注意,它基本上是相同的,我只是切换了公式查看的列以生成过滤帐户列表。如果您需要知道如何从列表中获取所有唯一项(在这种情况下,它将获取所有唯一 ID),请查看 AdvancedFilter。
    【解决方案2】:

    练习这个.....它会得到你需要的。

    您的数据必须进行排序才能正常工作。

    排序数据

    节目数据验证

    剧集数据验证

    数据验证框中的这个公式

    =OFFSET($A$1,MATCH($E$4,$A:$A,0)-1,1,COUNTIF($A:$A,$E$4),1)
    

    输入数组公式以查找 Duration 必须用 Ctrl & Shift & Enter

    确认

    =INDEX($C$4:$C$18,MATCH(1,(E4=$A$4:$A$18)*(F4=$B$4:$B$18),0))

    【讨论】:

      猜你喜欢
      • 2016-08-13
      • 1970-01-01
      • 1970-01-01
      • 2015-02-25
      • 2015-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多