周五,兴致勃勃将要下班回家嗨皮的小王被领导叫住了。
领导说:
“我的Excel中有一份人员名单,共计5000个单元格左右的姓名数据,我给你50个姓氏数据(如李,谢,叶等),帮我把这个50个姓氏字符在所有姓名数据中字体标红并加粗”
小王给了领导一句:
“给我1分钟的时间”
领导顿时呆住了。。。
领导鼓捣了一下午没有完成的任务,没想到听到小王回答只需要一分钟即可完成的答复后,感到倍感羞愧。没想到有20年工作经验的自己还不如刚来工作1年的孩子小王。顿时感到Excel对提高工作效率的重要性。
下面我们为了方便讲解思路,用几组简单的数据模拟还原一下复杂的工作场景,如下图所示:
最左边的表格区域为一份人员姓名的名单
数据源,
中间F列是一些指定的
姓氏数据:李、谢、叶。我们想要将这些指定的
姓氏字符在
数据源中找出并批量将字体
标红并加粗。形成
最右边数据的效果。
我们都知道:
①如果使用Excel的【查找和替换】功能的话,是无法实现对某个单元格内,部分文字的字体颜色等格式数据进行查找替换的。不信大家可以试试,这是Excel的一个硬伤。
②如果我们将数据复制到Word中,使用Word文档的【查找和替换】功能,虽然可以实现对指定字符的字体颜色等格式数据的查找和替换,但是没有批量操作的功能,即在本例中要重复至少50次。而且在Excel和Word之间复制粘贴布局复杂的表格时,有造成数据混乱的可能。
所以在这里,我们来介绍使用VBA代码的方式快速解决今天这个问题。
步骤01.姓氏合并到一个单元格
我们先将F列中指定要标红并加粗的字符合并到一个单元格中,并在合并后的数据上加上中括号。
我们在H2单元格输入函数公式:
="["&PHONETIC(F2:F4)&"]"
PHONETIC函数可以将选定区域范围内的文本数据合并到一个单元格中;
用&连接符将中括号“[]”与合并后的数据连接起来。
步骤02.
进入VBA代码编辑器
鼠标右击工作表名称标签,点击【查看代码】命令(或按快捷键Alt+F11键)进入VBA代码编辑器的窗口。
步骤03.
复制并粘贴代码
复制下面的那段VBA代码并粘贴至VBA代码编辑器窗口内。
步骤04.
运行代码
点击代码器窗口上方的【运行-运行子过程/用户窗体】命令。
运行完成代码后即可实现:
将这些指定的姓氏字符:李、谢、叶,在数据源中批量将其字体标红并加粗。
代码如下:
Sub test()
Dim rng As Range
Set rg = CreateObject("vbscript.regexp")
rg.Global = True
rg.Pattern = [H2]
With Range("A1:D7")
.Font.Color = 0
.Font.Bold = 0
For Each rng In .Cells
v = rng.Value
Set mas = rg.Execute(v)
For Each ma In mas
With rng.Characters(1 + ma.firstindex, ma.Length).Font
.Color = vbRed
.Bold = True
End With
Next
Next
End With
End Sub
3代码释义
01.指定条件区域
代码:
rg.Pattern = [H2]
其中[H2]即我们合并姓氏数据到一个单元格后的单元格地址H2,注意单元格地址H2需加上中括号[]。
02.
确定数据源区域
代码:
With Range("A1:D7")
其中A1:D7为我们需要操作的数据源区域A1:D7。
03.
字体颜色设置
代码:
.Color = vbRed
其中vbRed代表红色字体。如果是绿色改成vbGreen。
04.字体加粗设置
代码:
.Bold = True
其中True代表字体加粗。如果取消加粗改为常规修改为False即可。