专栏名称: 完美Excel
Excel与VBA技术学习与实践
目录
相关文章推荐
51好读  ›  专栏  ›  完美Excel

deepseek使用Excel仿百度搜索框,随输入动态匹配已有数据

完美Excel  · 公众号  · Excel  · 2025-03-26 05:59

正文

请到「今天看啥」查看全文


学习Excel技术,关注微信公众号:
excelperfect

标签: AI-Excel deepseek VBA

我想在单元格或文本框中输入数据的时候,能够根据正在输入的数据动态显示可能匹配的数据,就像我们在使用百度搜索时,在搜索框中随着输入而在下方动态显示的条目。

按照我的需求,向 deepseek 提问:

我想在 Excel 中制作一个仿百度的搜索框,当用户在单元格或文本框中输入时会自动显示可能匹配的条目。换句话说,我想查找某列中的数据,在单元格或文本框中输入查找内容时,会随着输入自动动态调整可能匹配的条目。要求: 1. 可以使用工作表单元格实现,在这个单元格中输入要查找的内容; 2. 可以创建一个用户窗体,插入一个文本框,在这个文本框中输入要查找的内容。

deepseek 给出了我需要的两种方法。

方法一:使用工作表单元格实现动态搜索框

deepseek 给出的设置数据验证有误,如下图 1 所示。

文本

AI 生成的内容可能不正确。

1

此处,应该是:

=DynamicList

具体实现过程如下:

在列 A 中输入示例数据,按 Ctrl+F3 调出“定义名称”对话框,定义动态名称如下图 2 所示。

图形用户界面, 文本, 应用程序, 电子邮件

AI 生成的内容可能不正确。

2

假设输入单元格是 B2 ,设置其数据验证如下图 3 所示。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

3

Alt+F11 打开 VBE ,双击示例工作表代码模块名称 Sheet1 ,打开其代码窗口,输入代码:

Private Sub Worksheet_Change(ByVal Target As Range)  If Target.Address = "$B$2" Then    Application.EnableEvents = False ' 防止循环触发事件    Dim SearchTerm As String     SearchTerm = LCase(Target.Value)     Dim DataRange As Range    Set DataRange = Sheet1.Range("A2:A100")    DataRange.Parent.Range("C2:C100").ClearContents      ' 清空辅助列     Dim FilteredData As Collection    Set FilteredData = New Collection     Dim Cell As Range    For Each Cell In DataRange      If Len(Cell.Value) > 0 And InStr(1, LCase(Cell.Value), SearchTerm) > 0




    
 Then        FilteredData.Add Cell.Value      End If    Next Cell     If FilteredData.Count > 0 Then      Sheet1.Range("C2").Resize(FilteredData.Count).Value = Application.Transpose(CollectionToArray(FilteredData))      Me.Names.Add Name:="DynamicList", RefersTo:=Sheet1.Range("C2:C" & FilteredData.Count + 1)    Else      Me.Names.Add Name:="DynamicList", RefersTo:=Sheet1.Range("C2") '引用非空单元格      Sheet1.Range("C2").Value = "无匹配项"  ' 添加占位文本    End If     Application.EnableEvents = True  End IfEnd Sub
' 辅助函数:将集合转为数组Function CollectionToArray(c As Collection) As Variant()  Dim arr() As Variant  ReDim arr(0 To c.Count - 1)  Dim i As Long  For i = 0 To c.Count - 1    arr(i) = c(i + 1)  Next  CollectionToArray = arrEnd Function

回到工作表,在单元格 B2 中输入数据时,效果如下图 4 所示。

图形用户界面, 应用程序, 表格, Excel

AI 生成的内容可能不正确。

4

方法二:使用用户窗体实现动态搜索框

Alt+F11 打开 VBE ,插入一个用户窗体,在该窗体上放置一个文本框和一个列表框,如下图 5 所示。

图片包含 表格

AI 生成的内容可能不正确。

5

在该用户窗体代码模块中,输入代码:

Private Sub TextBox1_Change()  ListBox1.Clear  Dim SearchTerm As String  SearchTerm = LCase(TextBox1.Text)    Dim DataRange As Range  Set DataRange = Sheet1.Range("A2:A100"  Dim Cell As Range  For Each Cell In DataRange    If InStr(1, LCase(Cell.Value), SearchTerm) > 0 Then      ListBox1.AddItem Cell.Value    End If  Next Cell   ' 自动调整列表框大小  If ListBox1.ListCount > 0 Then    ListBox1.Visible = True    ListBox1.Height = Application.Min(120, ListBox1.ListCount * 15)  Else    ListBox1.Visible = False  End IfEnd Sub
Private Sub ListBox1_Click()   TextBox1.Text = ListBox1.Value  ListBox1.Visible = FalseEnd Sub
Private Sub UserForm_Initialize()   TextBox1.SetFocus  ListBox1.Visible = FalseEnd Sub

运行该用户窗体后的效果如下图 6 所示。

图形用户界面

AI 生成的内容可能不正确。

6

欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。
欢迎到知识星球: 完美 Excel 社群 ,进行技术交流和提问,获取更 多电子资料,并通过社群加入专门的微信讨论群,更方便交流。
图片







请到「今天看啥」查看全文