【问题标题】:Excel formula that will let me show a data range in a cell based on the value in another cellExcel 公式可让我根据另一个单元格中的值在一个单元格中显示数据范围
【发布时间】:2015-05-07 06:25:19
【问题描述】:

我正在尝试创建一个表单,其中有人可以从下拉列表中选择一个值,它将根据第一个单元格的值在下一个单元格中创建另一个下拉列表。下一个单元格下拉列表需要引用单独工作表上的单元格范围,并且仅将第 4-30 行显示为下拉列表。

这可能吗?我尝试使用间接公式进行数据验证,但由于代码以数字开头,因此无法定义单元格范围。

有什么建议会有所帮助吗?

【问题讨论】:

  • 你能发布一些关于你如何尝试INDIRECT 的信息吗?这是INDIRECT 更常见的用例之一,如果您正确命名范围,它通常会很好地工作。
  • 感谢您的回复。选择/匹配功能运行良好,只是我有 427 列需要匹配,这对于数据验证来说似乎太多了。
  • 对于间接,您需要命名您的范围,但是如果名称以数字开头,显然您无法定义名称。我所有的列表都是以数字开头的代码。

标签: vba excel excel-formula


【解决方案1】:

这是一个非常简单的使用VBA

的例子

将此事件宏放置在工作表代码区域中:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim A1 As Range, B1 As Range
    Set A1 = Range("A1")
    Set B1 = Range("B1")
    If Intersect(A1, Target) Is Nothing Then Exit Sub
    Select Case A1.Value
        Case "animals"
            Call SetupDV(B1, "dog,cat,bird")
        Case "days"
            Call SetupDV(B1, "monday,tuesday,wednesday")
        Case "months"
            Call SetupDV(B1, "january,february,march")
    End Select
End Sub

并将此宏放在标准模块中:

Sub MAIN()
    Cells.Validation.Delete
    Call SetupDV(Range("A1"), "animals,days,months")
End Sub

Sub SetupDV(MyCells As Range, st As String)
    With MyCells.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
            Operator:=xlBetween, Formula1:=st
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = True
    End With
End Sub

然后运行 ​​MAIN

每当您从单元格 A1 中的下拉菜单中进行选择时,单元格 B1 中的下拉菜单都会相应调整:

【讨论】:

    【解决方案2】:

    有一个单独使用公式的解决方案,无需 VBA 代码。

    假设您的数据如下所示:

    • 第一列选择列表是类别,在 A2:A4 中。
    • 第二列选择列表将被选为 C2:C6 | 之一D2:D6 | E2:E6,通过选择一个类别。
    • 在 G2:G3 中,您可以选择一个类别。
    • H2:H3会按照G中选择的类别分别显示列表。

    H2:H3 的验证列表来源将使用以下公式定义:

    =CHOOSE(MATCH(G2,$C$1:$E$1,0),$C$2:$C$6,$D$2:$D$6,$E$2:$E$6)
    

    选择 H2:H3,转到数据验证,选择列表并将此公式放入源中。 (H3 的范围参考会自动更新)。

    公式:

    MATCH 部分为 C1:E1 中的类别名称返回 1,2 或 3。 CHOOSE 根据在​​函数中提供的顺序分别返回范围 C、D 或 E。

    备注:

    区域可以引用另一个工作表中的单元格,只需在验证列表公式中声明工作表名称Sheet2!C2:C6。在早期版本的 Excel 中,您需要为这些外部范围命名才能在验证列表中工作。

    【讨论】:

    • 这是一个经过深思熟虑的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多