image.png

本技巧的目的:在EXCEL 中通过 CTRL + F 或者通过 菜单栏中的查找, 查找到指定内容的单元格。

今天主要介绍使用VBA来查找的方法。

1. 使用代码助手快速调取 FIND 和 LIKE 的方法

  1. 代码助手下载地址 [http://excel880.com/blog/archives/11297](http://excel880.com/blog/archives/11297)
  • 输入 FIND 空格 可快速调出 FIND 语句:里面有详细的注释,如何输入代码。 代码助手还支持自己根据需要定义,收录自己所需的代码。
  • 技巧005 批量查找的2种方法 - 图3
  • Like 空格 同样可以得到代码助手的提示。
  • 技巧005 批量查找的2种方法 - 图4

    2. FIND 方法详细说明

    1. 录制宏获取代码
  • 查找 B1 : B14 区域中 编号为 262101 的单元格
  • 技巧005 批量查找的2种方法 - 图5
  • ★★★注意:查找方法要录取到代码,一定要点击:查找下一个, 然后关闭。
  • 点击二次可以得到 查找下一个 的相应代码。
  • 如果只点击:查找全部,然后关闭, 会出现这种没有录制到 FIND 代码的情况。如下图:
  • 技巧005 批量查找的2种方法 - 图6
  • 正确录制到的代码:
  • 技巧005 批量查找的2种方法 - 图7
  • 代码:
  • 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: 基本不使用,搜索内容的格式,如:字体、边框等等。
  • 根据以上内容可将代码修改成:
  • 技巧005 批量查找的2种方法 - 图8
  • 代码:
  • 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 语句 可以使用通配符进行复杂的查找,先看下图:

  • 技巧005 批量查找的2种方法 - 图9
  • 代码:
  • 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 个文字的名字,如下图:
  • 技巧005 批量查找的2种方法 - 图10
  • pattern中的字符 符合string中的字符
  • ? 任何单一字符
    • 零个或多个字符
  • 技巧005 批量查找的2种方法 - 图11
  • 结论:BAT123khg like B?T* 匹配: 结果正确
  • 技巧005 批量查找的2种方法 - 图12
  • 结论:CAT123khg like B?T* 匹配: 结果错误
  • 任何一个数字 (0–9)

  • 技巧005 批量查找的2种方法 - 图13
  • 结论:1 like # 匹配: 结果正确
  • [charlist] charlist中的任何单一字符
  • ★★★注意:大小写要相同才能正确匹配
  • 技巧005 批量查找的2种方法 - 图14
  • 结论: f like [a-z] 匹配: 结果正确
  • 技巧005 批量查找的2种方法 - 图15
  • 结论: f like [A-Z] 匹配: 结果错误
  • [!charlist] 不在charlist中的任何单一字符
  • 技巧005 批量查找的2种方法 - 图16
  • 结论:f like [!a-z] 匹配: 结果错误

    更多作品请百度搜索 郑广学

    VBA代码助手 懒人神器 在 EXCEL880.COM 官网下载