当前位置: 首页 > 知识库问答 >
问题:

依赖下拉列表excel

赫连俊悟
2023-03-14

我的方法我尝试使用名称范围为我的2列。然后转到下一个工作表并创建2列(CountryInput,CitiesInput)。在名为CountryInput的专栏中,我进入数据验证工具以创建第一个下拉列表。CitiesInput列应该依赖于CountryInput是我遇到的问题。我尝试使用indirect=a2函数,但没有任何结果。

我也可以使用vba或宏来做这件事吗?

共有1个答案

益源
2023-03-14

是的。使用VBA来做这件事是可能的。然而,只有当您打算使用国家和城市作为一个连续的列表时,命名范围才是可能的,即所有按国家和城市顺序排序的行。下面的代码将允许您创建此特性,而不管排序顺序如何,即即使数据没有排序。这是一个基本的代码不写的性能但工作,请编辑相应。希望这能解决你的问题。

Sub SetupCountry() 'run this on workbook open event
    Dim rng As Range
    Set rng = ActiveSheet.Range("H7")  'choose your cell(s) here
    With rng.Validation
        FRM = GetUniqueCountries()
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=FRM
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
End Sub

Sub SetupCity()  'run this sub on the change event of Country cell
    Dim rng As Range
    Set rng = ActiveSheet.Range("I7")  'choose your cell(s) here
    With rng.Validation
        FRM = GetCities()
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=FRM
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
End Sub


Function GetUniqueCountries() As String
    Dim sOut As String
    Dim v, c
    Dim rngList As Range

    Set rngList = ActiveSheet.Range("D7:D28") 'edit the range where your country list is stored
    sOut = ""

    For Each c In rngList
        If InStr(1, sOut, c.Value & ",") = 0 Then  'check if the value is already in the upload list and add if not there
            sOut = c.Value & "," & sOut
        End If
    Next c
    'remove first ,
    If sOut <> "" Then
        sOut = Left(sOut, Len(sOut) - 1)
    End If
    GetUniqueCountries = sOut
End Function
Function GetCities() As String
     Dim sOut As String
    Dim v, c
    Dim rngSearch As Range

    Set rngSearch = ActiveSheet.Range("D7:D28") 'edit the range where your cities list exists
    sOut = ""

    For Each c In rngSearch
        If c.Value = ActiveSheet.Range("H7").Value Then 'selected country
            sOut = sOut & "," & ActiveSheet.Range("E" & c.Row).Value
        End If
    Next c
    'remove first ,
    If sOut <> "" Then
        sOut = Mid(sOut, 2)
    End If
    GetCities = sOut
End Function


如果您可以按照国家和城市对数据进行排序,那么命名范围将是一个更优雅的解决方案。当city的datavalidation公式引用命名范围(例如CITIES)时,您需要根据country的值重置CITIES的范围(使用类似的getCities()函数的构造)。

下面显示了一种更改命名范围的范围引用的简单方法。可以根据搜索输出更新公式。


ActiveWorkbook.Names("SOMENAMEDRANGE").RefersTo = "=Sheet1!$D$5:$L$25"

 类似资料:
  • 我期待城市列表中的城市名单基于代码的输入。 请求你的协助。

  • 我有剑道网格,我需要在两个单元格中内联编辑两个下拉列表。第二个列表依赖于第一个列表。第二个可以有0个或X个项目。当秒为0时,如何在保存项目时向服务器发送空值? 网格如下所示: 操作编辑器模板: 当我单击“保存”时,我在请求中始终具有操作的默认值。谢谢你的帮助!

  • 我试图在AngularJS中实现依赖级联下拉列表。它很好:如果我选择任何国家(例如:),那么在第二个下拉框中会显示状态(例如:、、)(这很好)。 但是我的要求是:在显示了一个国家的上述相关状态之后,我只需要在第一个下拉框中显示给定状态的相应所选国家(例如,如果我选择了Country1的

  • 本文向大家介绍gradle 列表依赖,包括了gradle 列表依赖的使用技巧和注意事项,需要的朋友参考一下 例子 调用dependencies任务可以使您看到根项目的依赖关系: 结果是依存关系图(考虑了传递依存关系),已按配置细分。要限制显示的配置,您可以传递--configuration选项,然后传递一个选定的配置进行分析: 要显示子项目的依赖关系,请使用<subproject>:depende

  • 我需要两个依赖的下拉列表。在VBA中,我尝试为单个列表创建下拉列表,但我无法使其依赖。下拉列表如下所示 第一个下拉列表的内容 对应的清单2是 对于dd1 对于dd2 就像怀斯。 我已经用完了代码 列表中不能有任何空格/空单元格。 我也试过这个 https://siddharthrot.wordpress.com/2011/07/29/excel-data-validationcreate-dyna

  • 增加下拉列表在到按钮上,确保 data-activates 属性匹配 <ul> 标签的 id,你可以增加分隔线通过 <li class="divider"></li> 标签。 <!-- Dropdown Trigger --> <a class='dropdown-button btn' href='#' data-activates='dropdown1'>单击我</a> <!-- D