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:
= List
。 Source:
= =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 因此文件需要保存为启用宏的文件类型
告诉我你过得怎么样。
我有两个下拉菜单单元格。单元格 A1 用于品牌名称,B1 用于型号名称。我希望如果在单元格 A1 中选择三星,则在单元格 B1 中仅启用三星型号。所有品牌和型号分开列出 sheet.
请让我知道如何实现这个,因为我是 excel 的新手。
解决方案实际上比您想象的要简单。我在下面提出了 2 个建议,第一个根本不需要 VBA——第二个需要。在这两种情况下,您都必须首先正确命名列出模型名称的范围。
命名范围 (两个选项都必须完成)
以三星为例,select列出所有三星型号名称的单元格(必须连续)并命名范围Samsung
。按品牌名称重复所有其他型号列表。你说所有品牌和型号都分开列出sheet所以你知道怎么做。
选项一 – 仅公式
在单元格 B1
中,将数据验证设置为:Allow:
= List
。 Source:
= =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 因此文件需要保存为启用宏的文件类型
告诉我你过得怎么样。