对我低级别的Excel理解深表抱歉,也许我不想做的事情。
我有一个120个条目的列表,我想用它作为数据验证。但是,如果他们可以开始输入并查看可以与他们愿意写的内容相匹配的选项,那么人们不必向下滚动120个选项。有点像自动填充,我找到了 this tip。
我想在打字开始时有更多选择。
例如,这将是列表的一部分:
Awareness
Education
Budget
Budget Planning
Enterprise Budget
当输入“B”时,我希望显示最后三个选项并单击其中一个。我不知道在这里是否有包含vlookup的方法......
理想情况下,最好的方法是在一个单元格中放置几个“标签”,但我担心excel绝对不可能。
非常感谢您的任何意见,如果我没有正确解释,请对不起。
答案 0 :(得分:4)
如果您不想沿着VBA路径前进,那么上一个问题就有这个技巧。
Excel 2010: how to use autocomplete in validation list
它确实会在您的工作表顶部添加一些恼人的批量,以及潜在的维护(如果您需要更多选项,添加员工名单中的人员名称,新项目等),但工作方式完全相同。
答案 1 :(得分:2)
http://www.ozgrid.com/Excel/autocomplete-validation.htm有一个混乱的解决方法基本上是这样的:
Tools - Options > Edit
; 答案 2 :(得分:1)
上述解决方案均无效。看似有效的那个只提供一个单元格的功能
最近我不得不输入很多名字,没有任何建议,这是一个巨大的痛苦。我很幸运有this excel autocomplete add-in来启用自动完成功能。缺点是您需要启用宏(但您可以随后将其关闭)
答案 3 :(得分:1)
ExtendOffice.com offers a VBA solution在Excel 2016中为我工作。这是我对步骤的描述。我添加了其他详细信息以使其更容易。我还稍微修改了VBA代码。如果这不适合您,请重试这些步骤或查看ExtendOffice页面上的说明。
将数据验证添加到一个单元格(或单元格范围)。允许=列表。来源= [包含您要自动完成/下拉的值的范围]。单击确定。现在,您应该有一个下拉列表,但自动完成功能较弱。
对于包含新添加的数据验证的单元格,请插入ActiveX组合框(而不是表单控件组合框)。这是通过Developer功能区完成的。如果没有开发人员功能区,则需要从Excel选项菜单中添加它。
从“控件”部分的“开发人员”选项卡中,单击“设计模式”。选择刚插入的组合框。然后在同一功能区部分中,单击“属性”。在“属性”窗口中,将组合框的名称更改为“ TempComboBox”。
按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
确保已引用“ Microsoft Forms 2.0对象库”。在Visual Basic编辑器中,转到“工具”>“引用”,选中该库旁边的框(如果尚未选中),然后单击“确定”。要验证其是否有效,请转到“调试”>“编译VBA项目”。
最后,保存您的项目,然后单击包含您添加的数据验证的单元格。您应该会看到一个带有下拉建议列表的组合框,该建议列表会随着您键入的每个字母而更新。
答案 4 :(得分:1)
这是一种解决方案,该方法如何使用VBA制作自动填充下拉列表:
首先,您需要在工作表中插入一个组合框并更改其属性,然后运行VBA代码以启用自动完成功能。
进入工作表,该工作表包含您希望其自动完成的下拉列表。
在插入组合框之前,需要启用功能区中的“开发人员”选项卡。
a)。在Excel 2010和2013中,单击文件>选项。然后在“选项”对话框中,单击右窗格中的“自定义功能区”,选中“开发人员”框,然后单击“确定”按钮。
b)。在Outlook 2007中,单击Office按钮> Excel选项。在“ Excel选项”对话框中,单击右栏中的“流行”,然后选中“功能区”框中的“显示开发人员”选项卡,最后单击“确定”按钮。
然后单击“ ActiveX控件”下的“开发人员”>“插入”>“组合框”。
在当前打开的工作表中绘制组合框,然后右键单击它。在右键菜单中选择“属性”。
通过单击“开发人员”>“设计模式”来关闭设计模式。
右键单击当前打开的工作表选项卡,然后单击“查看代码”。
确保打开了当前工作表代码编辑器,然后将下面的VBA代码复制并粘贴到其中。
Private Sub Worksheet_SelectionChange(ByVal目标作为范围) '由Extendoffice更新:2018/9/21 昏暗的xCombox作为OLEObject Dim xStr作为字符串 昏暗的xWs作为工作表 昏暗的xArr
Set xWs = Application.ActiveSheet
On Error Resume Next
Set xCombox = xWs.OLEObjects("TempCombo")
With xCombox
.ListFillRange = ""
.LinkedCell = ""
.Visible = False
End With
If Target.Validation.Type = 3 Then
Target.Validation.InCellDropdown = False
Cancel = True
xStr = Target.Validation.Formula1
xStr = Right(xStr, Len(xStr) - 1)
If xStr = "" 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 = "" Then
xArr = Split(xStr, ",")
Me.TempCombo.List = xArr
End If
.LinkedCell = Target.Address
End With
xCombox.Activate
Me.TempCombo.DropDown
End If
结束子
私有子TempCombo_KeyDown(ByVal KeyCode为MSForms.ReturnInteger,ByVal Shift为整数) 选择案例键码 案例9 Application.ActiveCell.Offset(0,1)。激活 案例13 Application.ActiveCell.Offset(1,0)。激活 结束选择 结束
单击“文件”>“关闭”,然后返回到Microsoft Excel以关闭“ Microsoft Visual Basic for Application”窗口。
现在,只需单击带下拉列表的单元格,您会看到下拉列表显示为组合框,然后在框中键入第一个字母,相应的单词将自动完成。 / p>
注意:此VBA代码不适用于合并的单元格。
来源: How To Autocomplete When Typing In Excel Drop Down List?
答案 5 :(得分:0)
我改编了ChrisB的答案。就像在他的示例中一样,当单击单元格时,将显示一个临时组合框。另外:
Option Explicit
Private Const DATA_RANGE = "A1:A16"
Private Const DROPDOWN_RANGE = "F2:F10"
Private Const HELP_COLUMN = "$G"
Private Sub Worksheet_SelectionChange(ByVal target As Range)
Dim xWs As Worksheet
Set xWs = Application.ActiveSheet
On Error Resume Next
With Me.TempCombo
.LinkedCell = vbNullString
.Visible = False
End With
If target.Cells.count > 1 Then
Exit Sub
End If
Dim isect As Range
Set isect = Application.Intersect(target, Range(DROPDOWN_RANGE))
If isect Is Nothing Then
Exit Sub
End If
With Me.TempCombo
.Visible = True
.Left = target.Left - 1
.Top = target.Top - 1
.Width = target.Width + 5
.Height = target.Height + 5
.LinkedCell = target.Address
End With
Me.TempCombo.Activate
Me.TempCombo.DropDown
End Sub
Private Sub TempCombo_Change()
If Me.TempCombo.Visible = False Then
Exit Sub
End If
Dim currentValue As String
currentValue = Range(Me.TempCombo.LinkedCell).Value
If Trim(currentValue & vbNullString) = vbNullString Then
Me.TempCombo.ListFillRange = "=" & DATA_RANGE
Else
If Me.TempCombo.ListIndex = -1 Then
Dim listCount As Integer
listCount = write_matching_items(currentValue)
Me.TempCombo.ListFillRange = "=" & HELP_COLUMN & "1:" & HELP_COLUMN & listCount
Me.TempCombo.DropDown
End If
End If
End Sub
Private Function write_matching_items(currentValue As String) As Integer
Dim xWs As Worksheet
Set xWs = Application.ActiveSheet
Dim cell As Range
Dim c As Range
Dim firstAddress As Variant
Dim count As Integer
count = 0
xWs.Range(HELP_COLUMN & ":" & HELP_COLUMN).Delete
With xWs.Range(DATA_RANGE)
Set c = .Find(currentValue, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
Set cell = xWs.Range(HELP_COLUMN & "$" & (count + 1))
cell.Value = c.Value
count = count + 1
Set c = .FindNext(c)
If c Is Nothing Then
GoTo DoneFinding
End If
Loop While c.Address <> firstAddress
End If
DoneFinding:
End With
write_matching_items = count
End Function
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
注意:
2 - fmMatchEntryNone
。不要忘记将ComboBox名称设置为TempCombo
ComboBox.addItem
完成相同操作,但是事实证明,随着用户类型的不同,重新绘制列表框很困难答案 6 :(得分:0)
为什么不使用枢轴?