带有建议/自动完成功能的Excel数据验证

gcv*_*gcv 16 tags validation excel

对我低级别的Excel理解表示歉意,也许我想做的事情是不可能的.

我有一个120个条目的列表,我想用它作为数据验证.但是,如果他们可以开始输入并查看可以与他们愿意写的内容相匹配的选项,那么人们不必向下滚动120个选项.有点像自动完成,我找到了这个提示.

我想在打字开始时有更多选择.

例如,这将是列表的一部分:

Awareness  
Education  
Budget  
Budget Planning  
Enterprise Budget 
Run Code Online (Sandbox Code Playgroud)

键入"B"时,我希望显示最后三个选项并单击其中一个.我不知道在这里是否有包含vlookup的方法...

理想情况下,完美的事情是在一个单元格中有几个"标签",但我担心excel绝对不可能.

非常感谢您的任何意见,如果我没有正确解释,请对不起.

小智 5

如果您不想沿着 VBA 路径走下去,可以使用上一个问题中的这个技巧。

Excel 2010:如何在验证列表中使用自动完成功能

它确实在您的工作表顶部添加了一些令人讨厌的体积和潜在的维护(如果您需要更多选项,从员工列表中添加人员姓名,新项目等),但工作原理都是一样的。


Wal*_*cio 5

http://www.ozgrid.com/Excel/autocomplete-validation.htm有一个混乱的解决方法,基本上工作原理如下:

  1. 启用“自动完成单元格值” Tools - Options > Edit
  2. 在具有验证标准的单元格上方的单元格上重新创建有效项目列表;
  3. 隐藏包含有效项目列表的行。

  • 现代 Excel 上的等效过程(来自 support.office.com):单击“**文件”选项卡**,然后单击“**选项**”。单击“**高级**”,然后在“**编辑选项**”下,选中或清除“**启用单元格值自动完成**”复选框以打开或关闭单元格值的自动完成功能。 (4认同)

Chr*_*isB 5

ExtendOffice.com 提供了一个在 Excel 2016 中对我有用的 VBA 解决方案。这是我对这些步骤的描述。我添加了其他详细信息以使其更容易。我还稍微修改了 VBA 代码。如果这对您不起作用,请重试这些步骤或查看 ExtendOffice 页面上的说明。

  1. 向单元格(或单元格范围)添加数据验证。允许 = 列表。来源 = [您想要用于自动完成/下拉的值的范围]。单击确定。您现在应该有一个下拉菜单,但自动完成功能较弱。

    在此处输入图片说明

  2. 使用包含新添加的数据验证的单元格,插入 ActiveX 组合框(不是表单控件组合框)。这是从开发人员功能区完成的。如果您没有开发人员功能区,则需要从 Excel 选项菜单中添加它。

    在此处输入图片说明

  3. 从“控件”部分的“开发人员”选项卡中,单击“设计模式”。选择您刚刚插入的组合框。然后在同一功能区部分单击“属性”。在“属性”窗口中,将组合框的名称更改为“TempComboBox”。

    在此处输入图片说明

  4. 按 ALT + F11 转到 Visual Basic 编辑器。在左侧,双击带有数据验证的工作表以打开该工作表的代码。将以下代码复制并粘贴到工作表上。注意:我稍微修改了代码,以便即使Option Explicit在工作表顶部启用它也能工作。

    Option Explicit
    
    Private Sub Worksheet_SelectionChange(ByVal target As Range)
    'Update by Extendoffice: 2018/9/21
    ' Update by Chris Brackett 2018-11-30
    
    Dim xWs As Worksheet
    Set xWs = Application.ActiveSheet
    
    On Error Resume Next
    
    Dim xCombox As OLEObject
    Set xCombox = xWs.OLEObjects("TempCombo")
    
    ' Added this to auto select all text when activating the combox box.
    xCombox.SetFocus
    
    With xCombox
        .ListFillRange = vbNullString
        .LinkedCell = vbNullString
        .Visible = False
    End With
    
    
    Dim xStr As String
    Dim xArr
    
    
    If target.Validation.Type = xlValidateList Then
        ' The target cell contains Data Validation.
    
        target.Validation.InCellDropdown = False
    
    
        ' Cancel the "SelectionChange" event.
        Dim Cancel As Boolean
        Cancel = True
    
    
        xStr = target.Validation.Formula1
        xStr = Right(xStr, Len(xStr) - 1)
    
        If xStr = vbNullString Then Exit Sub
    
        With xCombox
            .Visible = True
            .Left = target.Left
            .Top = target.Top
            .Width = target.Width + 5
            .Height = target.Height + 5
            .ListFillRange = xStr
    
            If .ListFillRange = vbNullString Then
                xArr = Split(xStr, ",")
                Me.TempCombo.List = xArr
            End If
    
            .LinkedCell = target.Address
    
        End With
    
        xCombox.Activate
        Me.TempCombo.DropDown
    
    End If
    End Sub
    
    Private Sub TempCombo_KeyDown( _
                    ByVal KeyCode As MSForms.ReturnInteger, _
                    ByVal Shift As Integer)
        Select Case KeyCode
            Case 9  ' Tab key
                Application.ActiveCell.Offset(0, 1).Activate
            Case 13 ' Pause key
                Application.ActiveCell.Offset(1, 0).Activate
        End Select
    End Sub
    
    Run Code Online (Sandbox Code Playgroud)
  5. 确保引用了“Microsoft Forms 2.0 Object Library”。在 Visual Basic 编辑器中,转到“工具”>“引用”,选中该库旁边的框(如果尚未选中),然后单击“确定”。要验证它是否有效,请转到“调试”>“编译 VBA 项目”。

  6. 最后,保存您的项目并单击带有您添加的数据验证的单元格。您应该会看到一个带有建议下拉列表的组合框,该列表会随着您键入的每个字母而更新。

在此处输入图片说明

在此处输入图片说明