带有名称/值对的Excel下拉列表

带有名称/值对的Excel下拉列表,excel,Excel,我有两张工作表的工作手册 “Sheet2”有两列: | A | B | +---------+---------------+ | code1 | description 1 | | code2 | Descr 2 | Sheet1有几列,其中一列(D列)为代码。在本专栏中,我需要一个“投递箱”,什么 将显示第2栏!B(描述),当用户选择一个描述时 将从列A中输入代码 是否可以在没有附加辅助列的情况下执行表1中的?(Excel 201

我有两张工作表的工作手册

“Sheet2”有两列:

|    A    |      B        |
+---------+---------------+
|  code1  | description 1 |
|  code2  | Descr 2       |
Sheet1有几列,其中一列(D列)为代码。在本专栏中,我需要一个“投递箱”,什么

  • 将显示第2栏!B(描述),当用户选择一个描述时
  • 将从列A中输入
    代码
是否可以在没有附加辅助列的情况下执行表1中的
?(Excel 2010)

因此,需要一些在html中非常简单的东西:

<select>
  <option value="code1">Description 1</option>
  <option value="code2">Descr 2</option>
</select>

说明1
描述2
当用户选择“Descr 2”时,表单将获得“code2”

这个问题可能是重复的——但我不确定——是为了: ,但唯一的答案是我找到了解决另一个问题的方法

添加了一个屏幕截图以获得更精确的解释:

听起来,数据验证(允许列表)与VLOOKUP相结合可以实现您想要的功能

在第2页上设置描述/代码列表。使其成为命名范围(有助于避免循环引用问题)

在工作表1的“说明”列中,使用数据验证创建引用列表的“说明”列的下拉列表。在代码列中,使用VLOOKUP函数,键入下拉列表值

=IF(B4="", "", VLOOKUP(B4, FruitList, 2, FALSE))
已更新-

我开始明白你所说的“没有助手栏”是什么意思了,但我不确定你能得到你想要的。Excel设计的一个事实是:你看到的就是你得到的,也就是说,单元格中显示的值就是该单元格的有效值。不能让单元格显示一个值,但“包含”另一个值。这样的事情在HTML中“非常简单”,但HTML控件的构建目的与电子表格中的单元格不同。这是两件同时发生的事情:一个值,以及该值的用户界面表示。电子表格单元格可以包含一种确定值(下拉列表、公式等)的方法,但它达到的任何值都将是它显示的值

Excel有表单支持,比如组合框,但我相信值仍然会输出到另一个单元格

通常的方法是使用数据验证创建一个下拉列表,并使用VLOOKUP为代码创建一个单独的列。如果您真的不能有另一列来包含代码,那么我不知道该告诉您什么。这将取决于如何使用数据;您是在尝试打印输出,还是该工作表正在由其他程序处理

更新2

如果您真的不想使用单独的代码列,您可以使用组合框技术,如下所述:

这会很复杂。您需要做的是(a)让组合框在用户选择D列中的一个单元格时显示,(b)动态调整框的显示项。这将涉及VBA代码,我不能100%肯定这是可能的。这显然不值得努力。

简单 这就是我们要得到的

仅3个步骤:

  • 定义用作查找值的范围

  • 创建下拉列表

  • 粘贴一些代码


  • 步骤1:设置
    表单2
    如下,并将命名范围定义为
    \u descrLookup

    这是一个可选步骤,但它只是使步骤3易于遵循



    第2步:
    Sheet1
    中,使用数据验证创建下拉列表,并使用要在下拉列表中显示的值作为源。在本例中,它是
    sheet2a2:A4
    (参见上图):



    步骤3:
    表1中添加一些VBA代码:

    ( Right-Click the tab Sheet1 -> View Code )
    
    Private Sub Worksheet_Change(ByVal Target As Range)
        selectedVal = Target.Value
    
        If Target.Column = 4 Then
            selectedNum = Application.VLookup(selectedVal, Worksheets("Sheet2").Range("_descrLookup"), 2, False)
    
            If Not IsError(selectedNum) Then
                Target.Value = selectedNum
            End If
    
        End If
    End Sub
    
    将其粘贴到
    表1的代码窗口中:

    ( Right-Click the tab Sheet1 -> View Code )
    
    Private Sub Worksheet_Change(ByVal Target As Range)
        selectedVal = Target.Value
    
        If Target.Column = 4 Then
            selectedNum = Application.VLookup(selectedVal, Worksheets("Sheet2").Range("_descrLookup"), 2, False)
    
            If Not IsError(selectedNum) Then
                Target.Value = selectedNum
            End If
    
        End If
    End Sub
    

    我可以通过以下步骤在Mac OS X的Excel 2016(15.33)中打开开发者选项卡:

  • 在菜单中选择Excel->Preferences
  • 创作部分,单击查看
  • 在对话框底部,选中开发人员选项卡复选框
  • “开发人员”选项卡现在在Excel中可见

  • 一种选择是提供数据输入表和数据值表,因此,您在输入屏幕中使用您的值列表创建您的用户疯狂下拉列表,但在值表上,您使用VLookup将用户友好的值转换为您的数据值,尽管这很痛苦,因此大多数人在同一个表上执行此操作,但在值字段中使用隐藏列。另外注意:您必须将a列和B列替换为a列VLookup开始工作谢谢,不幸的是我无法尝试解决方案,因为在Excel 2016(15.3)for Mac OS X中缺少VisualBasic宏编辑功能:(+1,因为你的截图显示了我的意思。)哦,不!你有开发者标签吗?如果没有,您可以单击顶部的小齿轮图标,转到功能区首选项并在那里启用它。希望有帮助!是的,“开发人员”选项卡在这里,但您是否尝试输入任何VB宏?这仍然是不可能的。“工作正在进行”,事实上,VB宏在我运行Excel 15.33版的Mac上为我工作。这很酷。我只有15.13.4,无法输入任何VB宏。编辑器将打开,但不允许输入任何宏。需要升级。非常感谢。