打开APP
userphoto
未登录

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

开通VIP
不得不说的高效Boy:Find方法


前两天有位朋友问了一个这个问题

这个问题用Find方法解决最好不过。因为如果用对单元格循环判断是否不为空的思路,会很耗内存。

我们就来说说Range.Find方法。

由Excel查找功能引入

我们先来看看Excel中常用的的查找功能,Ctrl+F出现查找对话框。可以查找数据、格式等。Excel的这个功能对查找指定的数据非常有用,特别是在含有大量数据的工作表中搜索数据时,更能体现出该功能的快速和便捷。

同样,在Excel VBA中有与该功能对应的Find方法,提供了一种在单元格区域查找特定数据的简单方式,并且比用循环方法进行查找的速度更快。

Find方法作用

Find方法将在指定的单元格区域中查找包含参数指定数据的单元格,若找到符合条件的数据,则返回包含该数据的单元格;若未发现相匹配的数据,则返回Nothing该方法返回一个Range对象

从上面的描述我们知道,Find是在指定的单元格区域中查找的,所以一定要在Find前面加上单元格区域。Find方法是属于Range对象的。

感觉好多无聊废话

,不过很重要,认真听,使用的时候你会回来看一遍的。

Find方法语法

<单元格区域>.Find (What,[After],[LookIn],[LookAt],[SearchOrder],[SearchDirection],[MatchCase],[MatchByte],[SearchFormat])


看见语法就头疼,翻译成汉语:

<单元格区域>.Find (要查找的数据开始查找的位置,查找的范围类型,完全匹配还是部分匹配,行列方式查找,向前向后查找,区分大小写,全角或半角,查找格式)

PS:上述语法加粗部分是常用的,能解决大部分问题。

上图中没有列出来的:

参数SearchDirection,可选。用来确定查找的方向,即是向前查找(XlPrevious)还是向后查找(xlNext),默认的是向后查找

参数After,可选。指定开始查找的位置,即从该位置所在的单元格之后向后或之前向前开始查找(也就是说,开始时不查找该位置所在的单元格,直到Find方法绕回到该单元格时,才对其内容进行查找)。所指定的位置必须是单元格区域中的单个单元格,如果未指定本参数,则将从单元格区域的左上角的单元格之后开始进行查找。


注意:

在每次使用Find方法后,参数LookIn、LookAt、SearchOrder、MatchByte的设置将保存。如果下次使用本方法时,不改变或指定这些参数的值,那么该方法将使用保存的值。

若用户在“查找与替换”对话框中更改了这些参数,它们将同时反映到程序代码中,当再次运行代码时,运行结果可能会产生差异或错误。若要避免这个问题,在每次使用时建议明确的设置这些参数!


一口气写这么多,歇会儿

Find方法使用实例

●实例1:查找"零件编号"

思路:如果要提取表格中“零件编号”后面的实际编号MS-001,并且每个表格中零件编号的位置不确定,这个时候用Find函数再好不过。可以先查询关键字“零件编号”位置,其他都好办了。

代码如下

Sub Find方法例子1()Set Rng = ActiveSheet.UsedRangess = Rng.Find("零件编号", , xlValues, xlWhole, xlByColumns, xlNext, True, True).Offset(0, 1).ValueEnd Sub

offset(0,1)代表,找到的目标单元格向右移动一次的单元格。

●实例2:获取每行最后一个黄色单元格地址。

思路:因为是查找颜色,所以参数SearchFormat:=True。(前面截图有讲,忘记的翻看一下)。

Sub 查找最后一个黄色单元格()    Application.FindFormat.Interior.Color = 65535 '黄色单元格的编号    For i = 1 To 10  '举例查找前10行        Set Rng = Rows(i).Cells        Set cl = Rng.Find(What:="", After:=Rng.Cells(1, 1), LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, SearchFormat:=True)        MsgBox cl.Address    NextEnd Sub

Rng.Cells(1, 1) 表示区域左上角第一个单元格。

为什么这段代表可以找到最后一个黄色单元格?关键就在AfterSearchDirection两个参数的搭配上,从区域(本例是某一行所有的单元格)的第一个单元格cells(1,1)往前查,再往前不就是到最后一个了吗?

●实例3:回到文章开头的问题:返回每行第2个非空单元格的值

思路:要找到每行第2个非空单元格,重点在于先找到第一个。上个例子,找到最后一个黄色单元格可以实现,这次我们倒过来。

Sub 查找每行第二个非空单元格1()    For i = 1 To 5        Set Rng = Rows(i).Cells        Set cl = Rng.Find(What:="*", After:=Rng.Cells(1, Columns.Count), LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlNext)        Set cl1 = Rng.Find(What:="*", After:=cl, LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlNext)        MsgBox cl1    NextEnd Sub

What:="*" 表示查找的是非空单元格。第一个Find是找出来每行第一个非空单元格,接着以这个单元格为起点,接着得到第2个非空单元格。

感谢关注我的1260位朋友。

也欢迎大家留言,留言我都会回复的,尽全力帮助解决。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
[VBA]关于查找方法(Find方法)的应用示例补充
Excel VBA 8.48 获取数据最后一次出现的记录 简单的VBA就可以实现
【新提醒】Excel 【资料】关于查找方法(Find方法)的应用
查找某行第一个或最后一个红色的单元格 | VBA实例教程
excel中国合伙人教你另类求和,只要知道简称和全称,不管如何变,照样求和。
vba.Find函数
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服