【问题标题】:Excel dropdown with name/value pairs带有名称/值对的 Excel 下拉列表
【发布时间】:2017-04-22 05:00:03
【问题描述】:

我有 2 个工作表的工作簿。

“Sheet2”有两列:

|    A    |      B        |
+---------+---------------+
|  code1  | description 1 |
|  code2  | Descr 2       |

Sheet1 有几列,其中之一(D 列)是代码。在这个专栏中我需要一个“投递箱”,什么

  • 将显示 Sheet2!B 列(描述),并且当用户选择一个描述时
  • 将从 col:A 输入code

可以在Sheet1中做without additional helper column吗? (Excel 2010)

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

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

当用户选择“Descr 2”时,表单会得到“code2”。

这个问题可能是重复的 - 但我不确定 - 要: How to create dropdown with multiple columns in excel,但它的唯一答案将我指向 external site,其中的解决方案是针对另一个问题。

为更准确的解释添加了截图:

【问题讨论】:

    标签: excel


    【解决方案1】:

    简单! 这就是我们将要得到的!

    只需 3 步:

    1. 定义一个范围以用作查找值

    2. 创建下拉列表

    3. 粘贴一些代码


    第 1 步: 像这样设置 Sheet2 并将 命名范围 定义为 _descrLookup

    ( Highlight -> Right-Click -> "Define Name..." )
    

    这是一个可选步骤,但它只是为了便于执行第 3 步。



    第 2 步:Sheet1 中,使用数据验证 创建下拉列表,并使用您希望在下拉列表中显示的值作为来源。在这个例子中是Sheet2 A2:A4(见上图):

    ( Data -> Data Validation )
    



    第 3 步: 将一些 VBA 代码添加到 Sheet1
    ( Right-Click the tab Sheet1 -> View Code )
    

    将此粘贴​​到Sheet1 的代码窗口中:

    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.3) 中缺少 VisualBasic 宏编辑。 :(无论如何+1,因为你的截图显示了我的意思。:)
    • 哦不!你有开发者的标签吗?如果没有,您可以单击顶部的小齿轮图标,然后转到功能区首选项并在那里启用它。希望有帮助!
    【解决方案2】:

    听起来数据验证(允许列表)与 VLOOKUP 结合可以满足您的需求。

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

    在工作表 1 的描述列中,使用数据验证来创建引用列表描述列的下拉列表。在代码栏使用VLOOKUP函数,关闭下拉列表值。

    =IF(B4="", "", VLOOKUP(B4, FruitList, 2, FALSE))
    

    更新 -

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

    Excel 支持组合框等表单,但我相信该值仍会输出到另一个单元格。

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

    更新 2

    如果您真的不想使用单独的代码列,您也许可以使用此处部分描述的组合框技术:

    http://www.contextures.com/xlDataVal10.html

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

    【讨论】:

    • 一个选项是有一个数据输入表和一个数据值表,所以你在输入屏幕中使用你的值列表来创建你的用户友好的下拉列表,然后在值表上你使用VLookup 将用户友好的值转换为您的数据值,虽然这很痛苦,所以大多数人在同一张表上执行此操作,但对值字段使用隐藏列
    • 附加说明:您必须交换 A 列和 B 列才能使 VLookup 工作
    【解决方案3】:

    我能够使用以下步骤在 Mac OS X 的 Excel 2016 (15.33) 中打开“开发人员”选项卡:

    1. 在菜单中选择Excel->首选项
    2. 创作部分,点击查看
    3. 在对话框底部,选中开发者标签复选框

    1. “开发人员”选项卡现在在 Excel 中可见

    【讨论】:

    • 是的,开发人员选项卡在这里,但是您尝试输入任何 VB 宏吗?这仍然是不可能的。 “工作正在进行中”,因为它是 described herealso here
    • VB 宏在我运行 Excel 15.33 版的 Mac 上为我工作。
    • 这很酷。我只有 15.13.4,无法输入任何 VB 宏。编辑器打开,但不允许输入任何宏。需要进行升级。谢谢。
    猜你喜欢
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多