繁体   English   中英

Excel - 下拉菜单会随着另一个单元格中的某些输入而改变

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM