[英]Excel - drop down menu changes with certain input in another cell
我有两个用于下拉菜单的单元格。 单元格 A1 用于品牌名称,B1 用于 model 名称。 我希望如果在单元格 A1 中选择了三星,则在单元格 B1 中只有三星型号才能启用。 所有品牌和型号都列在单独的表格中。
请让我知道如何实现这一点,因为我是 excel 的新手。
解决方案实际上比您想象的要简单。 我在下面提出了 2 个建议,第一个根本不需要 VBA - 第二个需要。 在这两种情况下,您必须首先正确命名列出 model 名称的范围。
命名范围(必须为这两个选项完成)
以三星为例, select 列出了所有三星 model 名称的单元格(必须是连续的),并将范围命名为Samsung
。 按品牌名称对所有其他 model 列表重复此操作。 你说所有的品牌和型号都列在单独的纸上,所以你知道怎么做。
选项一 - 仅公式
在单元格B1
中,将数据验证设置为: Allow:
= List
。 Source:
= =INDIRECT($A$1)
现在,当您更改单元格A1
中的选择时,数据验证的来源通过命名范围更改为该品牌的 model 列表。
优点:不需要 VBA。 实施简单。
缺点: INDIRECT()
是易失性 function。 当您更改A1
中的品牌时,最后使用的 model 将留在单元格B1
中(直到您更改它),这可能会干扰引用该单元格的任何公式。
选项二 – VBA
将以下代码放在数据验证单元格所在的工作表的工作表模块区域中。
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
中的值替换为该品牌的第一个有效 model 编号。
缺点:使用 VBA 因此文件需要保存为启用宏的文件类型
让我知道你如何 go。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.