Note: The other languages of the website are Google-translated. Back to English
登入  \/ 
x
or
x
註冊  \/ 
x

or

在Excel下拉列表中鍵入時如何自動完成?

如果您有一個包含大項目的數據驗證下拉列表,則需要在列表中上下滾動以查找合適的列表,或者直接在列錶框中鍵入整個單詞。 如果在下拉列表中鍵入第一個字母時有允許自動完成的方法,一切將變得更加容易。 本教程將提供一種VBA方法來幫助您實現它。

使用VBA代碼輸入下拉列表時自動完成
下拉列表的更多教程...


使用VBA代碼輸入下拉列表時自動完成

請執行以下操作,以在單元格中鍵入相應字母后使下拉列表自動完成。

首先,您需要在工作表中插入一個組合框並更改其屬性。

1.打開包含要使其自動完成的下拉列表單元格的工作表。

2.在插入組合框之前,需要將“開發人員”選項卡添加到Excel功能區。 如果功能區上顯示“開發人員”標籤, 轉到步驟3。 否則,請執行以下操作:單擊 文件 > 選項 打開 選項 窗口。 在這個 Excel選項 窗口中,單擊 自定義功能區 在左窗格中,檢查 開發人員 框,然後單擊 OK 按鈕。 看截圖:

3。 點擊 開發人員 > 插入 > 組合框(ActiveX控件).

4.在當前工作表中繪製一個組合框。 右鍵單擊它,然後選擇 精選樓盤 從右鍵單擊菜單中。

5。 在裡面 精選樓盤 對話框中,請替換原始文本 (姓名) 場與 TempCombo。

6。 關閉 設計模式 通過點擊 開發人員 > 設計模式。

然後,應用下面的VBA代碼

7.右鍵單擊當前工作表選項卡,然後單擊 查看代碼 從上下文菜單中。 看截圖:

8.在開幕 Microsoft Visual Basic for Applications 窗口,請將以下VBA代碼複製並粘貼到工作表的“代碼”窗口中。

VBA代碼:在下拉列表中鍵入時自動完成

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Update by Extendoffice: 2020/01/16
    Dim xCombox As OLEObject
    Dim xStr As String
    Dim xWs As Worksheet
    Dim 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
End Sub
Private Sub TempCombo_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Select Case KeyCode
        Case 9
            Application.ActiveCell.Offset(0, 1).Activate
        Case 13
            Application.ActiveCell.Offset(1, 0).Activate
    End Select
End Sub

9。 按 其他 + Q 同時關閉按鍵 Microsoft Visual Basic應用程序 窗口。

從現在開始,單擊下拉列表單元格時,下拉列表將自動提示。 您可以開始輸入字母,以使所選單元格中的相應項目自動完成。 看截圖:

備註: 此代碼不適用於合併的單元格。

使用Excel中的複選框輕鬆創建下拉列表:

帶有復選框的下拉列表 的效用 Kutools for Excel 可以幫助您根據需要在指定範圍,當前工作表,當前工作簿或所有打開的工作簿中輕鬆創建帶有復選框的下拉列表。
立即下載並嘗試! (30天免費試用)


相關文章:

如何在Excel中使用多個複選框創建下拉列表?
許多Excel用戶傾向於創建帶有多個複選框的下拉列表,以便每次都從列表中選擇多個項目。 實際上,您無法使用數據驗證功能創建帶有多個複選框的列表。 在本教程中,我們將向您展示兩種在Excel中創建帶有多個複選框的下拉列表的方法。 本教程提供了解決問題的方法。

在Excel中從另一個工作簿創建下拉列表
在工作簿中的工作表之間創建數據驗證下拉列表非常容易。 但是,如果數據驗證所需的列表數據位於另一個工作簿中,您將怎麼辦? 在本教程中,您將詳細了解如何從Excel中的另一個工作簿創建拖放列表。

在Excel中創建可搜索的下拉列表
對於具有眾多價值的下拉列表,找到合適的價值並非易事。 以前,我們已經介紹了一種在下拉框中輸入第一個字母時自動完成下拉列表的方法。 除了自動完成功能之外,您還可以使下拉列表可搜索,以提高在下拉列表中查找適當值時的工作效率。 為了使下拉列表可搜索,請嘗試本教程中的方法。

在Excel下拉列表中選擇值時自動填充其他單元格
假設您已經根據單元格區域B8:B14中的值創建了一個下拉列表。 在下拉列表中選擇任何值時,都希望在選定單元格中自動填充單元格範圍C8:C14中的相應值。 為了解決該問題,本教程中的方法將對您有所幫助。

下拉列表的更多教程...


最佳辦公效率工具

Kutools for Excel解決了您的大多數問題,並使您的生產率提高了80%

  • 重用: 快速插入 複雜的公式,圖表 以及您以前使用過的任何東西; 加密單元 帶密碼 創建郵件列表 並發送電子郵件...
  • 超級公式欄 (輕鬆編輯多行文本和公式); 閱讀版式 (輕鬆讀取和編輯大量單元格); 粘貼到過濾範圍...
  • 合併單元格/行/列 不會丟失數據; 拆分單元格內容; 合併重複的行/列...防止細胞重複; 比較範圍...
  • 選擇重複或唯一 行; 選擇空白行 (所有單元格都是空的); 超級查找和模糊查找 在許多工作簿中; 隨機選擇...
  • 確切的副本 多個單元格,無需更改公式參考; 自動創建參考 到多張紙; 插入項目符號,複選框等...
  • 提取文字,添加文本,按位置刪除, 刪除空間; 創建和打印分頁小計; 在單元格內容和註釋之間轉換...
  • 超級濾鏡 (將過濾方案保存並應用於其他工作表); 高級排序 按月/週/日,頻率及更多; 特殊過濾器 用粗體,斜體...
  • 結合工作簿和工作表; 根據關鍵列合併表; 將數據分割成多個工作表; 批量轉換xls,xlsx和PDF...
  • 超過300種強大功能。 支持Office / Excel 2007-2019和365。支持所有語言。 在您的企業或組織中輕鬆部署。 完整功能30天免費試用。 60天退款保證。
kte選項卡201905

Office選項卡為Office帶來了選項卡式界面,使您的工作更加輕鬆

  • 在Word,Excel,PowerPoint中啟用選項卡式編輯和閱讀,發布者,Access,Visio和Project。
  • 在同一窗口的新選項卡中而不是在新窗口中打開並創建多個文檔。
  • 每天將您的工作效率提高50%,並減少數百次鼠標單擊!
officetab底部
Say something here...
symbols left.
You are guest
or post as a guest, but your post won't be published automatically.
Loading comment... The comment will be refreshed after 00:00.
  • To post as a guest, your comment is unpublished.
    Jesus Bermudez · 21 days ago
    Hi, thanks for your code. I have a problem, It's not working. My data for the validation list is in other sheet (Also is a excel table Ctrl + T because I need enter new data every day), I dont know if any of these are the problem. Can you help me with this?
  • To post as a guest, your comment is unpublished.
    opalmagic · 25 days ago
    @stefany Check out the world's best site for selling opal rings opal jewelry
  • To post as a guest, your comment is unpublished.
    stefany · 1 months ago
    hi, thanks for your code. I would like to autocomplete and make multiple selections in a drop down list. Can you help me please?, thank you
  • To post as a guest, your comment is unpublished.
    Dilshan · 2 months ago
    @crystal Hi,
    I am trying to pull that list data from another sheet but it does not work. below is my code
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    'Update by Extendoffice: 20190812
    Dim xCombox As OLEObject
    Dim xStr As String
    Dim xWs As Worksheet
    Dim xArr
    Dim xRgStr As String
    Dim xRg As Range
    xRgStr = "MAINInput!$D:$D"
    'MAINInput = sheet name where the list is available


    Set xWs = Application.ActiveSheet
    On Error Resume Next
    Set xCombox = xWs.OLEObjects("cmbEmployee")
    With xCombox
    .ListFillRange = ""
    .LinkedCell = ""
    .Visible = False
    End With
    Set xRg = Intersect(Range(xRgStr), Target)
    If xRg Is Nothing Then Exit Sub
    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.cmbEmployee.List = xArr
    End If
    .LinkedCell = Target.Address
    End With

    xCombox.Activate
    Me.cmbEmployee.DropDown
    End If
    End Sub
    Private Sub cmbEmployee_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Select Case KeyCode
    Case 9
    Application.ActiveCell.Offset(0, 1).Activate
    Case 13
    Application.ActiveCell.Offset(1, 0).Activate
    End Select
    End Sub
  • To post as a guest, your comment is unpublished.
    wendy · 4 months ago
    @crystal I have done that - saved as a macro-enabled workbook but it still all disappears when you close the file. Thanks, Wendy

  • To post as a guest, your comment is unpublished.
    crystal · 5 months ago
    @taras.samolyuk Good day,
    Would you provide a screenshot of what you are trying to do?
  • To post as a guest, your comment is unpublished.
    krish · 5 months ago
    Hello thanks for the code it works great.
    But i want to auto expand drop down list when i move to next cell by pressing enter key without clicking on arrow button (or) alt+down.
    Thanks in advance.
  • To post as a guest, your comment is unpublished.
    taras.samolyuk · 5 months ago
    Hello, is there a chance to add dependency to select date and in the next column to the proposed choices?
  • To post as a guest, your comment is unpublished.
    Christiam Alfonzo · 5 months ago
    como hago para agregar esta función
    =INDIRECTO("tabla1[columna]")
    al código
  • To post as a guest, your comment is unpublished.
    crystal · 5 months ago
    @Danielle Hi,
    The code works well in my case. It is not easy to figure out the problem as you described above. Would you mind sending your worksheet to my email address?
  • To post as a guest, your comment is unpublished.
    Danielle · 5 months ago
    I tried to use this method. I added the code. After that I add the range needed. Looks all fine. Then I test and the combobox dissapears directly after filling it. So the code works, but its not usable. What do I do wrong?
    Kind regards, Danielle
  • To post as a guest, your comment is unpublished.
    coltan123 · 7 months ago
    Code is working , but data validation is not working. For example, when i set the data validation to be red/bue/yellow, it does not show error message when i type green
  • To post as a guest, your comment is unpublished.
    crystal · 8 months ago
    @Mhyk Hi,
    Methods in this tutorial can do you a favor:
    How To Auto Populate Other Cells When Selecting Values In Excel Drop Down List?
    https://www.extendoffice.com/documents/excel/2400-excel-drop-down-list-auto-populate.html
  • To post as a guest, your comment is unpublished.
    Mhyk · 8 months ago
    Hi I have some difficulties with my excel work. I would like to know if there is a method to autofill the cell I desire?
    Example
    1 = san pedro
    2 = santa rosa
    3 = calamba
    4 = san pablo
    and so on.

    I have a list with correspoding numbers. If I input number 1 in Cell A5 I would like it to automatically fill the Cell B5 with its corresponding list name (san pedro) and if I input 3 in A5, B5 will be = calamba.
    thank you. for the help, Im having trouble to find a solution to this hope to find answers.
    Thank you and God Bless.


  • To post as a guest, your comment is unpublished.
    Sisi · 8 months ago
    Hi Guys,


    I have made 2 different drop down list searchable in 1 sheet, the fist is working well but the second drop down list is showing me the formula of indirect as the second drop down list is indirect of the first. I have apply the VBA with combo and so on but still the second list is showing me the formula. how to I fix this?
  • To post as a guest, your comment is unpublished.
    Simona Muresan · 8 months ago
    Hi Guys,


    I have made 2 different drop down list searchable in 1 sheet, the fist is working well but the second drop down list is showing me the formula of indirect as the second drop down list is indirect of the first. I have apply the VBA with combo and so on but still the second list is showing me the formula. how to I fix this?

  • To post as a guest, your comment is unpublished.
    Alistair · 8 months ago
    @crystal Hi there, this is a great solution, but for some reason, in the original code, the combox was hidden when the cell with the data validation was not active, and only visible when the cell was selected.
    With this code, we get undo back, which is perfect, but the combox does not auto-hide again when you click off.
    Do you have a solution for this?

    Thanks,

    Alistair
  • To post as a guest, your comment is unpublished.
    Donald · 9 months ago
    @crystal Hi Cristal, great answer. Now if on the same worksheet I want to add another combo box that calls data from a third sheet, how would the code look like as I tried and got no result. I will appreciate your support. Donald
  • To post as a guest, your comment is unpublished.
    crystal · 9 months ago
    @Leonardo Hi Leonardo,
    The VBA works for all data validation drop down lists in the worksheet.
  • To post as a guest, your comment is unpublished.
    Juan Carlos · 9 months ago
    Hello, I have a problem with this method and I already use a list validated with an indirect function to refer to the range of a table and when applying this macro it shows me only the indirect formula in the list! How could I solve this problem?
  • To post as a guest, your comment is unpublished.
    Leonardo · 9 months ago
    Hi! Is it possible to disable the combo box scrolling list when I click on the cell? and leave it active only if I click on the arrow, thanks!
  • To post as a guest, your comment is unpublished.
    Leonardo · 9 months ago
    Hello, is it possible to replicate this in a complete column? I mean that each individual row of a column has this possibility or at least 1000 rows in a simple way. Thank you!
  • To post as a guest, your comment is unpublished.
    ahmad zaid · 9 months ago
    @crystal It's work in cell with list but when i move or tap or select any cell with no list ..the up message talked you about always show..

  • To post as a guest, your comment is unpublished.
    crystal · 9 months ago
    @Rohit Hi Rohit,
    After applying the code, please save the workbook as an Excel Macro-Enabled Workbook before closing the file.
  • To post as a guest, your comment is unpublished.
    gurita_22 · 9 months ago
    If you use this method with one combobox/sheet i guess it's flawless.

    I used this method with three comboboxes on one sheet with 3 different ListFillRange.
    Dropdown keep showing up on different combobox than what i'm typing in.
    1. I type and select correctly from the first.
    2. When i go to second combo, the third dropdown pops up.(I have to select the"", as it is still empty)
    then i can search my second combobox.
    3. When i go to the third, the first dropdown pops up, I reselect the only item(as there is only one that was already selected in the first step)
    After this i can add the content in the third dropdown.



    All subs are on sheet1's vba window.
    Now i'm trying to spit code in different modules, but can't really make it work.
    Search works, but i always have to push the dropdown arrow to see available results to select. Dropdown doesn't pop up at all.

    using 365, but i have to make "sheet" work on excel 2010
  • To post as a guest, your comment is unpublished.
    Rohit · 9 months ago
    The command works when first applied. But after saving the file, when i reopen it the drop down itself disappears.
  • To post as a guest, your comment is unpublished.
    crystal · 10 months ago
    @ahmadzaid Hi,
    I tried the VBA in Excel 2010 and it works well.
    The drop down list should be data validation drop-down list which is created by clicking Data > Data Validation....
  • To post as a guest, your comment is unpublished.
    ahmadzaid · 10 months ago
    @crystal I get an error message (1004) - the debug highlights ‘If Target.Validation.Type =3 Then’


    fo info. I use excel 2010
  • To post as a guest, your comment is unpublished.
    ahmadzaid · 10 months ago
    I get an error message (1004) - the debug highlights ‘If Target.Validation.Type =3 Then’


    for info .. I use excel 2010

  • To post as a guest, your comment is unpublished.
    crystal · 10 months ago
    @Carlos Hi Carlos,
    Remove the "cancel = true" line from the VBA, then try again.
  • To post as a guest, your comment is unpublished.
    Carlos · 10 months ago
    @crystal Hi. Office 365 Pro Plus
  • To post as a guest, your comment is unpublished.
    crystal · 10 months ago
    @Carlos Hi Carlos,
    Which Excel version are you using?
  • To post as a guest, your comment is unpublished.
    Carlos · 11 months ago
    Hi! Thanks for this code!

    I'm getting a compile error saying "variable not defined", it highlights the "cancel = true" line
  • To post as a guest, your comment is unpublished.
    crystal · 11 months ago
    @Reinaldo Yajure Hi Reinaldo Yajure,
    Please apply the below VBA code. The problem is fixed. Sorry for the inconvenience.

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    'Update by Extendoffice: 2020/05/19
    Dim xCombox As OLEObject
    Dim xStr As String
    Dim xWs As Worksheet
    Dim xArr

    Set xWs = Application.ActiveSheet
    On Error Resume Next
    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
    Set xCombox = xWs.OLEObjects("TempCombo")
    With xCombox
    .ListFillRange = ""
    .LinkedCell = ""
    .Visible = False
    End With
    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
    End Sub
    Private Sub TempCombo_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Select Case KeyCode
    Case 9
    Application.ActiveCell.Offset(0, 1).Activate
    Case 13
    Application.ActiveCell.Offset(1, 0).Activate
    End Select
    End Sub
  • To post as a guest, your comment is unpublished.
    Mitchell · 11 months ago
    Hi Crystal,

    Absolutely perfect and thank you for the code. However when i press enter the cell automatically goes down. How can I make the cell go to the right when I press enter?

    MItchell

  • To post as a guest, your comment is unpublished.
    crystal · 11 months ago
    @Sergio Hi Sergio,
    The method in this article can help you:
    How To Create A Searchable Drop Down List In Excel?
    https://www.extendoffice.com/documents/excel/2439-excel-drop-down-list-search.html
  • To post as a guest, your comment is unpublished.
    crystal · 11 months ago
    @Sandeep Sharma Hi Sandeep Sharma,
    In the Properties dialog box of the Combo box (step 5 of this tutorial), please find the ListRows field and then change the number 8 to 12 under the Alphabetic tab.
  • To post as a guest, your comment is unpublished.
    Sergio · 11 months ago
    Hi,

    Is it possible to show the matches with the caracter your typping using this code and format of combox?

    Example:

    You have a list with Onion, Black Onion, Green Onion, Red Onion...

    And in the combox you type: "On", so the drop down list show all the values existing on the list that matchs with "On".

    Thanks
  • To post as a guest, your comment is unpublished.
    Reinaldo Yajure · 11 months ago
    When I applied this code to my worksheet, the Undo function is disabled (but only for this sheet in the workbook) -- is there a way to fix this so that undo can still be used?
  • To post as a guest, your comment is unpublished.
    Sandeep Sharma · 1 years ago
    is there any way to increase the list size as it is showing up only 10 line items as i have 12 lines
  • To post as a guest, your comment is unpublished.
    crystal · 1 years ago
    @Jonas Hi Jonas,
    The Tab key and the Enter key can work normally. But can't help with the Arrows yet. Sorry for the inconvenience.
  • To post as a guest, your comment is unpublished.
    Jonas · 1 years ago
    How can I Use Tab/Arrows/Enter to move to another cell once the current cell is filled? Thanks
  • To post as a guest, your comment is unpublished.
    Jonas · 1 years ago
    @crystal It doesnt work for me either, I can still enter items that are not on the list. can you please help!
  • To post as a guest, your comment is unpublished.
    Ramitha · 1 years ago
    Hi . It is a very useful code . However , I cannot use it on horizontal tables which are is a reference for vertical drop downs. Is there a solution ?
  • To post as a guest, your comment is unpublished.
    K1000z · 1 years ago
    @crystal Looks good.Thanks Crystal.
  • To post as a guest, your comment is unpublished.
    crystal · 1 years ago
    @K1000z Hi,
    If you only want the column H to be affected, please try the below VBA code. But it is only available in one worksheet. For multiple sheets, you need to add the code to each sheet code window. Hope I can help.

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    'Update by Extendoffice: 2019/8/14
    Dim xCombox As OLEObject
    Dim xStr As String
    Dim xWs As Worksheet
    Dim xArr
    Dim xRgStr As String
    Dim xRg As Range
    xRgStr = "H:H"

    Set xWs = Application.ActiveSheet
    On Error Resume Next
    Set xCombox = xWs.OLEObjects("TempCombo")
    With xCombox
    .ListFillRange = ""
    .LinkedCell = ""
    .Visible = False
    End With
    Set xRg = Intersect(Range(xRgStr), Target)
    If xRg Is Nothing Then Exit Sub
    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
    End Sub
    Private Sub TempCombo_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Select Case KeyCode
    Case 9
    Application.ActiveCell.Offset(0, 1).Activate
    Case 13
    Application.ActiveCell.Offset(1, 0).Activate
    End Select
    End Sub
  • To post as a guest, your comment is unpublished.
    crystal · 1 years ago
    @Jerome Hi Jerome,
    The Tab key still works well in my case after applying the code. Which Excel version are you using?
  • To post as a guest, your comment is unpublished.
    crystal · 1 years ago
    @Don P. Hi Don P.
    Only the 1-MatchEntryComplete option can make it work. Sorry can't help you for that.
  • To post as a guest, your comment is unpublished.
    crystal · 1 years ago
    @Billy Hi Billy,
    Which Excel version are you using?
  • To post as a guest, your comment is unpublished.
    K1000z · 1 years ago
    Hi Guys, are you able to share a code which i can use so that the autocomplete is used on the same column i.e H in every sheet within the workbook.