combobox 怎么实现对listview的类别查询_如何实现Excel单元格查询功能,Find方法详细讲解

NO.1

我们都知道,使用Excel中查询功能,按下键盘Ctrl+F键就可调出查询功能对话框。

其实,在执行此功能的时候就是一些代码在运行,那么使用vba代码如何实现查询呢?

Range对象中的Find方法给我们提供一个很好的解决办法,可以方便地执行表格内容查询功能。

Find相当于Excel中查找与替换对话框所执行的功能。

本节主要介绍如何应用Range对象的Find和FindNext对象。

778d4dc7c215b109f02297a17543480e.png

NO.2

Find英语意思”查找“,FindNext是查询下一个。

比如,要找一个关键字"潘金莲",那么就用代码:Range.Find "潘金莲"。

Range代表一个范围,就是说要在Range这个范围里找"潘金莲",所以Range就是一个单元格区域对象。

例如:Range("A1:F10").Find "潘金莲"

当然Find参数并是这么简单,其中有若干条件可以设置,比如查询条件,查询方式,大小写区分,向下查询,向上查询,先行后列或行列后行查询等等。

主要参数:

What:必需的,就是要查找的内容,数据类型为可变形,Variant。

Lookin:指定要搜索的数据的类型。xlFormulas 公式; xlValues值。

LookAt:指定是匹配全部搜索文本还是匹配任一部分搜索文本。xlPart 匹配任一部分; xlWhole

匹配全部。

应用以上参数就可写作这样:

Range("A1:F10").Find What:="潘金莲",Lookin:=xlValues,LookAt:=xlPart

查询格式如上代码,并不是我们在vba里要使用的全部正确格式。

严格来说这段代码有一个返回值,如上代码执行之后并没有任何表现。

所以要对代码进行一下调整。

dim R as Range

Set R=Range("A1:F10").Find (What:="潘金莲",Lookin:=xlValues,LookAt:=xlPart)

Msgbox R.Value

这样就会弹出查询到的内容,如果没有找到则返回一个Nothing。

重复查询

结合循环语句Do...While或For Each ...Next等循环语句,可以使用FindNext和FindPrevious进行重复查询。

解释

FindNext:当搜索到达指定的搜索区域末尾时,它会绕到该区域开头位置继续搜索

FindPrevious:当查找到指定查找区域的起始位置时,本方法将环绕至区域的末尾继续搜索

但是还有一个问题,由于它的工作原理,你会得到一个无限循环,也就是说不停地给你弹出查询到的结果。

默认情况下,当把查询范围遍历一个循环之后,Find会再次返回到开始或末尾位置继续查询,没有结束,没完没了。直到你给出一个结束条件。

如此,就必须要对第一次查询的结果,进行位置保存,把第一次找到的单元格地址Address保存到一个变量里,每次执行FindNext或FindPrevious对这个变量进行判断,如果相同就退出循环。

Dim FirstAddress as string

dim R as Range

Set R=Range("A1:F10").Find (What:="潘金莲",Lookin:=xlValues,LookAt:=xlPart)

FirstAddress=R.Address'保存第一次查询到的地址

具体参数设置如下图介绍:

7130938f57d33d3e2e71a3aa6ab53b17.png

NO.3

本示例做了一个很完整的查询方法。

其工作原理是,对于所选单元格内容进行查询,查询内容为文本框输入的内容(TextBox)。

查询结果以弹框方式显示出来,并且将查询结果的姓名列添加到组合框内(ComboBox)。

增加功能

单击选择组合框,弹出信息全部内容。

这里做了一个动态创建Form对话框以及表单控件功能,并且显示和删除Form表单的功能。

涉及比较多的表单创建定义操作。

当然,我们主要介绍Find功能。

ada4ec8259afd8a2dfd25a301e0a8e07.png

Find示例

选择下拉框ComboBox后弹出查询结果详细信息,如下图。

此过程中自动创建Form表单,关闭后删除表单。

这样的对查询结果有一个很完整的检测方式。

5071605c580b39b242451afe3676d083.png

显示Form表单

NO.4

查询按钮代码

Private Sub CommandButton1_Click()Dim x As String, xArr, n As IntegerReDim xArr(0)x = ActiveSheet.OLEObjects("TextBox1").Object.Valuex = VBA.Trim(x)Dim FirstAddr As StringIf getRanges Is Nothing Then MsgBox "没有选择查找范围!", vbInformation, "错误提示": Exit SubDim R As RangeWith getRanges'定义查询范围    Set R = .Find(what:=x, LookIn:=xlValues, lookat:=xlPart)'查询    If Not R Is Nothing Then        FirstAddr = R.Address'保存第一个查询到的地址        Do            n = n + 1            ReDim Preserve xArr(n)            Set R = .FindNext(R)'向下查询            xArr(n) = R.Row '保存行号            If R Is Nothing Then                MsgBox "No"            Else                'MsgBox r            End If            DoEvents        Loop While Not R Is Nothing And R.Address <> FirstAddr'设置循环条件'如果不是空值并且不是第一个查询到的地址就继续往下查询    Else        MsgBox "没有找到""" & x & """", vbInformation, "找不到"        Exit Sub    End IfEnd With'''''''''''''''''''''''''''''' ComboBox赋值Dim LArr()ReDim LArr(1 To UBound(xArr))Dim l As Variantn = 1For Each l In xArr    If l <> Empty Then        LArr(n) = Cells(l, 2).Value        n = n + 1    End IfNext lWith Me.ComboBox1    .Clear    .List = LArrEnd With'''''''''''''''''''''''''''''' ComboBox赋值MsgBox "共找到: " & UBound(xArr) & "个。"MsgBox Join(xArr)End Sub

查询范围函数

这个函数返回当前活动工作表被选择的单元格区域。

实际应用中需要替换为自己的工作表范围,把这个函数修改一下就可以应用以上过程。

Private Function getRanges() As Range    Dim w As Worksheet, wRange As Range    Set w = ActiveSheet    Set wRange = ActiveWindow.RangeSelection    Set getRanges = wRangeEnd Function
8e0fefed6352c43285b066e12fcddedf.png

NO.5

Range对象的Find方法是一个十分有用的功能,学习并掌握它对于VBA编程是一个极大的帮助。

在对数据进行查询过程中有着特别重要的意义。

有时候查询不是目的,查询之后将结果进行处理排序、改变格式、计算等才是真正要执行任务。

那么就需要配合使用其它代码功能对数据进行修饰。

那么更加强大的数据处理就需要学习更多的代码方法来进行操作。

-- END --

欢迎关注、收藏

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值