Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 94095|回复: 24

[分享] VBA-FIND方法 的运用

  [复制链接]
发表于 2011-1-20 20:17 | 显示全部楼层 |阅读模式
本帖最后由 龙猫 于 2011-1-20 20:23 编辑

为任务,天天在论坛混分
看了几个VBA代码,发现大家都特喜欢数组,还特喜欢把单元格区域整成数组,从这里找东东。

想起了一个不用数组就能找东东的方法——FIND方法
和大家分享一下:

-----------------------------------------------------------------------------
F1 帮助的内容:
Find 方法
应用于 Range 对象的 Find 方法。
在区域中查找特定信息,并返回 Range 对象,该对象代表用于查找信息的第一个单元格。如果未发现匹配单元格,就返回 Nothing。本方法不影响选定区域或活动单元格。
有关在 Visual Basic 中使用 Find 工作表函数的详细信息,请参阅F1帮助中在 Visual Basic 中使用工作表函数
expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SerchFormat)
expression      必需。该表达式返回一个 Range 对象。
What      Variant 类型,必需。要搜索的数据。可为字符串或任意 Microsoft Excel 数据类型。
After      Variant 类型,可选。表示搜索过程将从其之后开始进行的单元格。此单元格对应于从用户界面搜索时的活动单元格位置。值得注意的是,After 必须是区域中的单个单元格。请记住搜索是从该单元格之后   开始的;直到本方法绕回到指定的单元格时,才对其进行搜索。如果未指定本参数,搜索将从区域的左上角单元格之后开始。
LookIn      Variant 类型,可选。信息类型。
LookAt      Variant 类型,可选。可为以下 XlLookAt 常量之一:xlWholexlPart
SearchOrder      Variant 类型,可选。可为以下 XlSearchOrder 常量之一:xlByRowsxlByColumns
SearchDirection      XlSearchDirection 类型,可选。搜索的方向。
XlSearchDirection 可为以下 XlSearchDirection 常量之一。
xlNext 默认值
xlPrevious


MatchCase      Variant 类型,可选。若为 True,则进行区分大小写的查找。默认值为 False
MatchByte      Variant 类型,可选。仅在选择或安装了双字节语言支持时使用。若为 True,则双字节字符仅匹配双字节字符。若为 False,则双字节字符可匹配其等价的单字节字符。
SearchFormat      Variant 类型,可选。搜索的格式。
说明每次使用本方法后,参数 LookInLookAtSearchOrderMatchByte 的设置将保存。如果下次调用本方法时不指定这些参数的值,就使用保存的值。设置这些参数将更改“查找和替换”对话框中的设置,如果您忽略参数,更改“查找和替换”对话框中的设置将更改使用的保存值。若要避免这种问题的出现,每次使用该方法时请明确设置这些参数。
可以使用 FindNextFindPrevious方法重复搜索。
当搜索到指定的搜索区域的末尾时,本方法将绕回到区域的开始继续搜索。发生绕转后,若要停止搜索,请保存第一个找到的单元格地址,然后依据该保存地址测试每个后续查找到的单元格地址。
若要进行更为复杂的模式匹配查找,请用 For Each...Next 语句和 Like 运算符。例如,下列代码在单元格区域 A1:C5 中搜索字体名称以“Cour”开始的单元格。当 Microsoft Excel 找到匹配单元格以后,就将其字体改为“Times New Roman”。
For Each c In [A1:C5]   
   If c.Font.Name Like "Cour*" Then   
    c.Font.Name = "Times New Roman"   
  End If
Next
--------------------------------------------------------

下面是几个兰色版主以前的教学示例代码:

Sub Find1() '在某列查找
Dim k
k = Range("A:A").Find("A").Row
MsgBox k
End Sub

Sub Find11() '在多列查找
Dim k
k = Range("A:B").Find("BCD").Row
MsgBox k
End Sub

Sub Find2() '查找的起始位置
Dim k
k = Range("A:B").Find("A", AFTER:=Range("A5")).Row
MsgBox k
End Sub

Sub Find3() '在值中查找
Dim k
k = Range("B:B").Find("SE", LookIn:=xlValues).Row
MsgBox k
End Sub

Sub Find31() '在公式中查找
Dim k
k = Range("B:B").Find("C2", LookIn:=xlFormulas).Address
MsgBox k
End Sub

Sub Find32() '在备注中查找
Dim k
k = Range("B:C").Find("AB", LookIn:=xlComments).Address
MsgBox k
End Sub

Sub Find41() '按模糊查找
   Dim k
k = Range("B:C").Find("A", LookIn:=xlValues, LOOKAT:=xlPart).Address
MsgBox k
End Sub

Sub Find42() '匹配查找
   Dim k
k = Range("B:C").Find("A", LookIn:=xlValues, LOOKAT:=xlWhole).Address
MsgBox k
End Sub

Sub Find5() '按先行后列的方式查找
   Dim k
k = Range("A:B").Find("AB", LookIn:=xlValues, LOOKAT:=xlWhole, SEARCHORDER:=xlByRows).Address
MsgBox k
End Sub

Sub Find51() '按先列后行的方式查找
Dim k
k = Range("A:B").Find("AB", LookIn:=xlValues, LOOKAT:=xlWhole, SEARCHORDER:=xlByColumns).Address
MsgBox k
End Sub

Sub Find6() '查找方向(从后向前)
Dim k
k = Range("A:A").Find("A", , xlValues, xlWhole, xlByColumns, xlPrevious).Address
MsgBox k
End Sub

Sub Find61() '查找方向(从前向后)
Dim k
k = Range("A:A").Find("A", , xlValues, xlWhole, xlByColumns, xlNext).Address
MsgBox k
End Sub

Sub Find7() '字母大小写
Dim k
k = Range("a:b").Find("a", , xlValues, xlWhole, xlByColumns, xlNext, False).Address
MsgBox k
End Sub

Sub f7() '查找不到的情况
Dim MRG As Range
Set MRG = Range("A:A").Find("D")
  If MRG Is Nothing Then
    MsgBox "查找不到字母D"
  Else
    MsgBox "查找成功,单元格地址为:" & MRG.Address
  End If
End Sub

Sub f8() '二次查找
Dim MRG As Range
Set MRG = Range("A:A").Find("A")
Set mrg1 = Range("A:A").FindNext(MRG)
MsgBox mrg1.Address
End Sub

Sub F9() '区域查找
Dim MRG As Range, AAA As String
Set MRG = Range("A1:F16").Find("A")
AAA = MRG.Address
Do
   Set MRG = Range("A1:F16").FindNext(MRG)
   MsgBox MRG.Address
Loop Until MRG.Address = AAAEnd Sub
  

评分

参与人数 3 +22 收起 理由
苗凱 + 1 很给力!
开心妙妙 + 12 很给力!
wbzxz + 9

查看全部评分

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2011-1-20 20:18 | 显示全部楼层
回复

使用道具 举报

发表于 2011-1-20 20:55 | 显示全部楼层
回复

使用道具 举报

发表于 2011-8-21 20:23 | 显示全部楼层
很高兴等到您的帮助,我其实只是把学到的反应出来,没有别的意思,周末愉快
回复

使用道具 举报

发表于 2011-9-19 20:52 | 显示全部楼层
好{:011:}{:021:}
回复

使用道具 举报

发表于 2011-9-19 21:20 | 显示全部楼层
学习了
                     
回复

使用道具 举报

发表于 2011-12-24 15:58 | 显示全部楼层
谢谢 收藏收藏
回复

使用道具 举报

发表于 2012-6-6 13:31 | 显示全部楼层
先学习
回复

使用道具 举报

发表于 2012-9-6 08:20 | 显示全部楼层
学习了这个,很有用
回复

使用道具 举报

发表于 2012-9-16 16:15 | 显示全部楼层
Well,it dose help,Thx
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-16 11:25 , Processed in 0.150072 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表