42、VBA常用小代码101:批量改变单元格部分字符格式
先来一首提神的歌儿,上古洪荒时期的豪迈神曲,从字面逻辑上来说,有了这歌之后,才有了说走咱就走啊……世界那么大,我想去看看……哈哈,这首歌就是……
走四方 韩磊 - 隐藏的歌手第二季 第2期


嗯,说正事吧,又到了本周的点播时间,有个朋友问能不能批量将单元格中的部分字符改变格式,比如改变字体,字号,改变颜色……
举个例子,如下图所示,将“领导”两个字……字体变成15号,加粗且变成血红色……

干了这碗毒鸡汤,天黑就闭眼……

.
解决代码如下:
Sub MyCharacters()
'ExcelHome技术论坛VBA编程学习与实践:看见星光
Dim arr, s$, i&, L&, n&
s = '领导' '需要改变格式的字符串
n = Len(s) '变量s的长度
arr = Range('a1:a' & Cells(Rows.Count, 1).End(xlUp).Row)
For i = 1 To UBound(arr)
L = InStr(1, arr(i, 1), s, vbTextCompare)
'查找变量s在arr(i,1)中首次出现的位置,不区分字母大小写
Do While L '如果l不为0,也就是存在s的话那么……
With Cells(i, 1).Characters(L, n).Font
.Size = 15 '15号字体
.FontStyle = '加粗'
.Color = -16776961 '红色
End With
L = InStr(L n, arr(i, 1), s, vbTextCompare)
'寻找变量s下一个出现的位置
Loop
Next
MsgBox '处理完毕!'
End Sub
小贴士:
1,代码使用了characters对象。其语法是Characters(start, length),其中 start 为起始字符号,而 length 为要返回的字符个数。
2,代码使用了instr函数查找指定字符在字符串中最先出现的位置,其语法是InStr([start],string1, string2, [compare])。
start是可选参数。为数值表达式,设置每次搜索的起点。如果省略,将从第一个字符的位置开始。如果指定了 compare 参数,则一定要有 start 参数,例如本例小代码。
string1是必要参数。接受搜索的字符串表达式。
string2是必要参数。被搜索的字符串表达式。
Compare可选参数。指定字符串比较。简单理解,如果省略则区分字母大小写,如果指定参数为vbTextCompare则忽略字母大小写。