打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
13、[VBA入门到放弃笔记] Find方法

VBA中的Find方法相当于我们在工作表中的查找功能。

  • Find的语法是:
<单元格区域>.Find (What[After][LookIn][LookAt][SearchOrder][SearchDirection][MatchCase][MatchByte][SearchFormat])
[参数说明](1)<单元格区域>,必须指定,返回一个Range对象。(2)参数What,必需指定。代表所要查找的数据,可以为字符串、整数或者其它任何数据类型的数据。对应于“查找与替换”对话框中,“查找内容”文本框中的内容。(3)参数After,可选。指定开始查找的位置,即从该位置所在的单元格之后向后或之前向前开始查找(也就是说,开始时不查找该位置所在的单元格,直到Find方法绕回到该单元格时,才对其内容进行查找)。所指定的位置必须是单元格区域中的单个单元格,如果未指定本参数,则将从单元格区域的左上角的单元格之后开始进行查找。(4)参数LookIn,可选。指定查找的范围类型,可以为以下常量之一:xlValues、xlFormulas或者xlComments,默认值为xlFormulas。对应于“查找与替换”对话框中,“查找范围”下拉框中的选项。(5)参数LookAt,可选。可以为以下常量之一:XlWhole或者xlPart,用来指定所查找的数据是与单元格内容完全匹配还是部分匹配,默认值为xlPart。对应于“查找与替换”对话框中,“单元格匹配”复选框。(6)参数SearchOrder,可选。用来确定如何在单元格区域中进行查找,是以行的方式(xlByRows)查找,还是以列的方式(xlByColumns)查找,默认值为xlByRows。对应于“查找与替换”对话框中,“搜索”下拉框中的选项。(7)参数SearchDirection,可选。用来确定查找的方向,即是向前查找(XlPrevious)还是向后查找(xlNext),默认的是向后查找。(8)参数MatchCase,可选。若该参数值为True,则在查找时区分大小写。默认值为False。对应于“查找与替换”对话框中,“区分大小写”复选框。(9)参数MatchByter,可选。即是否区分全角或半角,在选择或安装了双字节语言时使用。若该参数为True,则双字节字符仅与双字节字符相匹配;若该参数为False,则双字节字符可匹配与其相同的单字节字符。对应于“查找与替换”对话框中,“区分全角/半角”复选框。(10)参数SearchFormat,可选,指定一个确切类型的查找格式。对应于“查找与替换”对话框中,“格式”按钮。当设置带有相应格式的查找时,该参数值为True。(11)在每次使用Find方法后,参数LookIn、LookAt、SearchOrder、MatchByte的设置将保存。如果下次使用本方法时,不改变或指定这些参数的值,那么该方法将使用保存的值。在VBA中设置的这些参数将更改“查找与替换”对话框中的设置;同理,更改“查找与替换”对话框中的设置,也将同时更改已保存的值。也就是说,在编写好一段代码后,若在代码中未指定上述参数,可能在初期运行时能满足要求,但若用户在“查找与替换”对话框中更改了这些参数,它们将同时反映到程序代码中,当再次运行代码时,运行结果可能会产生差异或错误。若要避免这个问题,在每次使用时建议明确的设置这些参数。

其参数有很多,但没必要都记住,知道参数what是查找的内容,参数lookat是模糊查找还是精确查找就可以了。

  • 假如要在A列精确查找是‘小明’的单元格,Find返回的是一个单元格对象,因此要用Set语句。如果能找到得到小明这个单元格,则Rng对象就不再是Nothing(什么也木有),可以用Not....Nothing表示(找到了),这可以用来判断,如入库单单号,是否在数据区(找得到)等。
Sub findd()'精确查找Dim Rng As RangeSet Rng = Range('a:a').Find(what:='小明', lookat:=xlWhole)End Sub
'模糊查找,A列含有‘小明’这个字符的单元格。Set Rng = Range('a:a').Find(what:='小明', lookat:=xlpart)
  • 通常,Find方法只能查找到第一个或者最后一个匹配的单元格,视乎查找方向而定。我们也可以通过Find方法返回单元格所在的行号,用来搞点神马事情,这样的好处是不需要循环确定,效率会稍高。




练习1:在A1:A10判断单据号码8是否已经存在。


Sub GG() Dim Rng As Range Set Rng = Range('a1:a10').Find(what:='8', lookat:=xlWhole) If Not Rng Is Nothing Then MsgBox '单据号码已存在,请勿XXXXxx' Else MsgBox '单据号码不存在' End IfEnd Sub
  • 要想用Find查找全部的数据,就要使用FindNext或FindPrevious方法配合。
  • 练习2:删除指定组别是7的所有数据。
Sub 删除行1()    Dim Rng As Range    Application.ScreenUpdating = False '关闭屏幕刷新    '查找组别7的单元格    'Set rng = Range('b:b').Find(what:='7')  '默认模糊查找    Set Rng = Range('b:b').Find(what:='7', lookat:=xlWhole) '精确查找    Do Until Rng Is Nothing '查找不到组别7就退出循环        Rng.EntireRow.Delete '组别7单元格的整行删除        Set Rng = Range('B:B').FindNext '查找下一个组别7    Loop    Application.ScreenUpdating = True '开启屏幕刷新End Sub

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
VBA:lookIn, lookAt
VBA常用代码解析(第十四讲)
用VBA代码轻松控制下拉列表
[VBA]关于查找方法(Find方法)的应用示例补充
VBA:replace方法求商品组合的总和
如何用VBA操作规划求解
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服