在Excel日常办公中,经常需要根据单元格格式而非内容进行数据筛选,例如:加粗字体、黄色底色、红色字体、指定字体/字号等。Excel自带查找功能无法直接批量选中格式单元格,因此可使用VBA实现,其适用场景非常广泛,如
案例分享
如下图所示,现在需要将所有符合以下条件的单元格查找并选中:字体为“仿宋”、加粗,并且背景色为浅蓝色
实现代码:
Sub Search() Dim FindStr As String, Rng As Range, Rng2 As Range Application.FindFormat.Clear With Application.FindFormat .Font.Name = "仿宋" .Font.Bold = True .Interior.Color = RGB(189, 215, 238) '浅蓝色 End With With Range("A:C") '查找区间 Set Rng1 = .Find(what:="", LookIn:=xlFormulas, LookAt:=xlPart, SearchFormat:=True) If Rng1 Is Nothing Then MsgBox "未找到": Exit Sub Set Rng2 = Rng1 FindStr = Rng1.Address Do Set Rng2 = Union(Rng2, Rng1) Set Rng1 = .Find(what:="", After:=Rng1, SearchFormat:=True) Loop While FindStr <> Rng1.Address Rng2.Select End WithEnd Sub
其中,
第3行代码:由于FindFormat属性有记忆功能,因此在进行按格式设置之前必须清除以前的所有设置,否则会查找不准确
第5~7行代码是设置的查询条件,如需要更多条件,都可在此处设置
.Font.Italic = True '斜体
.Font.Color = RGB(255, 0, 0) '字体颜色(如红色)
.Font.Size = 12 '字号大小
.Font.Strikethrough = True '删除线
.Font.Subscript = False '下标
.Font.Superscript = False '上标
第10行代码中,Find方法的What:=""表示查找的内容为空字符串。这是因为本次只根据格式查找,不关心单元格内容。但What参数是必需的,传空字符串""时,配合SearchFormat:=True,就可以实现仅按格式查找
执行代码后,所有符合条件的单元格就被选中了,结果如下:
这种按格式查找的方式,比手动逐个查看单元格格式高效得多,特别适合需要批量处理特定格式单元格的数据清洗、报表规范化等场景
掌握了这个技巧,大家就可以轻松实现“按字体”“按颜色”“按加粗”等条件的精准查找了,不妨试试吧?