Excel - 下拉菜单随另一个单元格中的特定输入而变化

Excel - drop down menu changes with certain input in another cell

我有两个下拉菜单单元格。单元格 A1 用于品牌名称,B1 用于型号名称。我希望如果在单元格 A1 中选择三星,则在单元格 B1 中仅启用三星型号。所有品牌和型号分开列出 sheet.

请让我知道如何实现这个,因为我是 excel 的新手。

解决方案实际上比您想象的要简单。我在下面提出了 2 个建议,第一个根本不需要 VBA——第二个需要。在这两种情况下,您都必须首先正确命名列出模型名称的范围。

命名范围 (两个选项都必须完成)

以三星为例,select列出所有三星型号名称的单元格(必须连续)并命名范围Samsung。按品牌名称重复所有其他型号列表。你说所有品牌和型号都分开列出sheet所以你知道怎么做。

选项一 – 仅公式

在单元格 B1 中,将数据验证设置为:Allow: = ListSource: = =INDIRECT($A) 现在,当您更改单元格 A1 中的 selection 时,数据验证的来源会通过命名范围更改为该品牌的型号列表。

优点:不需要 VBA。易于实施。

缺点:INDIRECT() 是一个 Volatile 函数。当您在 A1 中更改品牌时,最后使用的模型留在单元格 B1 中(直到您更改它),这可能会干扰引用该单元格的任何公式。

选项二 – VBA

将以下代码放在 sheet 的工作 sheet 模块区域中,您的数据验证单元所在的位置。

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo GetOut
Application.EnableEvents = False
Dim MyList As String

If Not Intersect(Range("A1"), Target) Is Nothing Then
 With ActiveSheet.Range("B1")
    .ClearContents
    .Validation.Delete
    MyList = Sheet1.Range("A1").Value
    .Validation.Add Type:=xlValidateList, Formula1:="=" & MyList
End With
ActiveSheet.Range("B1").Value = ActiveSheet.Range(MyList).Cells(1, 1).Value
End If

Continue:
    Application.EnableEvents = True
    Exit Sub
GetOut:
    MsgBox Err.Description
    Resume Continue   
End Sub

优点:将 B1 中的值替换为该品牌的第一个有效型号。

缺点:使用 VBA 因此文件需要保存为启用宏的文件类型

告诉我你过得怎么样。