【问题标题】:How can I make a drop down list reference different data when an option is selected?选择选项时,如何使下拉列表引用不同的数据?
【发布时间】:2015-08-08 08:50:00
【问题描述】:

我按照教程在 MS Excel 中创建了一个下拉列表,但它并没有达到我想要的效果。
我有两个工作表,“Main”和“FooBars”。 FooBars 的结构如下:

我在 Main 中的下拉列表从 FooBars 获取数据。列表选项组名为“FooBars”,它引用='FooBars'!$B$2:$B$3,Main 中显示它的单元格将数据验证的源设置为=FooBars

在我的下拉列表中,它会根据需要显示栏选项。
However, when an option is selected, is there a way to have it fill the cell in with the corresponding Foo data instead?

示例:
当用户单击下拉列表并选择“A”时,单元格将填充“1”。

【问题讨论】:

    标签: excel excel-2010 worksheet-function


    【解决方案1】:

    很简单......我们将使用单元格C1作为选项:

    • 如果 C1 为空,则使用 Bar
    • 如果 C1 不为空,则使用 Foo

    C2中输入:

    =IF($C$1="",B2,A2)

    并向下复制C列将根据C1中的值进行调整)

    然后选择一个单元格,例如 D5,并根据列 C 设置 DV:

    下拉列表会随着C1的变化而变化:

    编辑#1:

    在这种情况下,我们在单元格 D4 上设置 DV 以引用列 B

    然后我们在工作表代码区安装如下Event宏:

    Private Sub Worksheet_Change(ByVal Target As Range)
       Dim r As Range, z As Variant, rins As Range
       Dim whereis As Range
       Set r = Intersect(Range("D4"), Target)
       Set rins = Range("B2:B10")
    
       If r Is Nothing Then Exit Sub
       Set whereis = rins.Find(what:=Target.Value, After:=rins(1))
       If whereis Is Nothing Then Exit Sub
       z = whereis.Offset(0, -1).Value
       Application.EnableEvents = False
          Target.Value = z
       Application.EnableEvents = True
    End Sub
    

    如果我们现在选择一个字母来填写D4,就会出现对应的数字。

    因为是工作表代码,所以很容易安装和自动使用:

    1. 右键单击 Excel 窗口底部附近的选项卡名称
    2. 选择查看代码 - 这将打开一个 VBE 窗口
    3. 粘贴内容并关闭 VBE 窗口

    如果您有任何疑虑,请先在试用工作表上进行尝试。

    如果您保存工作簿,宏将与它一起保存。 如果您使用的是 2003 年以后的 Excel 版本,则必须保存 文件为 .xlsm 而不是 .xlsx

    要删除宏:

    1. 如上所示打开 VBE 窗口
    2. 清除代码
    3. 关闭 VBE 窗口

    要了解有关宏的更多信息,请参阅:

    http://www.mvps.org/dmcritchie/excel/getstarted.htm

    http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

    要了解有关事件宏(工作表代码)的更多信息,请参阅:

    http://www.mvps.org/dmcritchie/excel/event.htm

    必须启用宏才能正常工作!

    【讨论】:

    • 这仍然不能按我想要的方式工作。当我在下拉列表中选择“A”时,它应该用“1”填充单元格。
    • @JosephWebber 查看我的EDIT#1
    • 这几乎是我需要的,只需要一点点改变。我的列表选项在我的“FooBars”选项卡中,但我需要使用“主”选项卡中的列表。我如何将Range("B2:B10") 更改为Range("FooBars B2:B10")
    猜你喜欢
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多