本技巧的目的:在EXCEL 中通过 CTRL + F 或者通过 菜单栏中的查找, 查找到指定内容的单元格。
1. 使用代码助手快速调取 FIND 和 LIKE 的方法
代码助手下载地址 [http://excel880.com/blog/archives/11297](http://excel880.com/blog/archives/11297)
- 输入 FIND 空格 可快速调出 FIND 语句:里面有详细的注释,如何输入代码。 代码助手还支持自己根据需要定义,收录自己所需的代码。
- Like 空格 同样可以得到代码助手的提示。
-
2. FIND 方法详细说明
- 录制宏获取代码
- 查找 B1 : B14 区域中 编号为 262101 的单元格
- ★★★注意:查找方法要录取到代码,一定要点击:查找下一个, 然后关闭。
- 点击二次可以得到 查找下一个 的相应代码。
- 如果只点击:查找全部,然后关闭, 会出现这种没有录制到 FIND 代码的情况。如下图:
- 正确录制到的代码:
- 代码:
- Range(“B1:B14”).Select
- Selection.Find(What:=”262101”, After:=ActiveCell, LookIn:=xlFormulas, _
- LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
- MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate
- Selection.FindNext(After:=ActiveCell).Activate
- 注释:
- 第一次点击 查找下一个,录制到的代码为:FIND 方法
- 不关闭 查找 对话框,第二次点击 查找下一个,录制到的为:Findnext 方法
- ① 只有在运行过 FIND 方法后,才能使用本方法。
- ② 查找下一个,到未尾后将回到开始位置继续搜索。
- ③ 为防止死循环,可保存第一次找到的单元格地址,然后测试下一个查找到的单元格地址是否与其相同的方法来选 择是否退出循环。
- FIND 方法参数详细说明:
- ① 必须输入项: What 需要搜索的内容,字符串或者任意类型
- 以下均为 可以不输入,使用默认值的参数, 根据需要输入。
- ② After 从该单元格之后开始后开始查找,如果不写,从查找区域的左上角之后开始查找。
- ③ LookIn 3种信息类型。xlComments:批注 xlFormulas: 公式 xlValues: 值
- ④ LookAt 二种: xlWhole:完全匹配 或 xlPart:部分匹配:即任一部分搜索文本
- ⑤ SearchOrder 二种:
- xlByRows: 先将一行搜索完毕,再移到下一行进行搜索
- xlByColumns:先将一列搜索完毕,再移到下一列进行搜索
- ⑥ SearchDirection 搜索方向: xlNext 搜索下个一匹配值 xlPrevious 搜索上一匹配值。
- ⑦ MatchCase: 是否区分大小写 True:区分,False:不区分。默认值为 False。
- ⑧ MatchByte: 基本不使用,是否匹配全角半角 True: 匹配 False 不匹配
- ⑨ SearchFormat: 基本不使用,搜索内容的格式,如:字体、边框等等。
- 根据以上内容可将代码修改成:
- 代码:
- Set rng = Range(“B1:B14”).Find(What:=”262101”, LookAt:=xlPart, MatchByte:=False)
- ‘ 设置为变量 rng : 搜索 B1 : B14 区域, 条件为 “26101” , 部分匹配: 任一部分搜索文本 , 全角半角都匹配
- If Not rng Is Nothing Then ‘如果 rng 不为空
- c = rng.Address ‘记录第一次的地址
- Debug.Print c & “第1次” ‘调试语句, 打印地址
- k = 1 ‘计数, 为了调试用
- Do
- k = k + 1 ‘每查找到一次, 计数器 +1 , 为了调试用
- Set rng = Range(“B1:B14”).FindNext(rng) ‘下一次查找
- Debug.Print rng.Address & “第” & k; “次” ‘调试语句, 打印地址
- Loop While Not rng Is Nothing And rng.Address <> c
- ‘ 如果对象不为空且地址不等于第1次记录的地址, 则退出循环
- End If
注释: 图片中立即窗口的查找结果, 当代码执行到第四次查找到第1次的地址后, While 判断语句生效退出循环。
3. Like 方法详细说明
like 语句 可以使用通配符进行复杂的查找,先看下图:
- 代码:
- With Sheet1
- ‘位置语句: Sheet1
- .Range(“G:G”).ClearContents
- ‘ 清除 G 列原数据, Clearcontents: 只清除数据,保留格式
- Set 最大行 = .Range(“F60000”).End(xlUp) ‘最大行号
- For Each rng In .Range(“F2:F” & 最大行.Row)
- ‘ F2 到 F 最大行 单元格循环
- If rng.Value Like “[李叶王]*” Then ‘如果有相符的值
- k = k + 1 ‘计数器 +1
- .Range(“G” & k).Value = rng.Value ‘在G列输出相符的值
- End If
- Next
- End With
- 注释:
- 代码中使用了位置语句 With。在 With 和 End With 之间,需要使用该地址的位置前加上 . 代表使用上面的位置
- 首先要清除需要输出区域的原数据,这个区域以不影响需要保留数据的单元格为原则,可适当放大区域。
- like 语句 与 * 搭配, 如图例是匹配 以 李、叶、王 开头,后面多个文字的名字
- 如果 与 ? 搭配,如下图匹配 以 李、叶、王 开头,后面 1 个文字的名字,如下图:
- pattern中的字符 符合string中的字符
- ? 任何单一字符
- 零个或多个字符
- 结论:BAT123khg like B?T* 匹配: 结果正确
- 结论:CAT123khg like B?T* 匹配: 结果错误
任何一个数字 (0–9)
- 结论:1 like # 匹配: 结果正确
- [charlist] charlist中的任何单一字符
- ★★★注意:大小写要相同才能正确匹配
- 结论: f like [a-z] 匹配: 结果正确
- 结论: f like [A-Z] 匹配: 结果错误
- [!charlist] 不在charlist中的任何单一字符
- 结论:f like [!a-z] 匹配: 结果错误
更多作品请百度搜索 郑广学
VBA代码助手 懒人神器 在 EXCEL880.COM 官网下载