之前在知乎写的回答,想把代码分享给公司的同事,但公司的电脑只能上技术论坛,不能上知乎,所以转载到这里。

Sub 替换选中区域指定文字颜色()

Dim MyStr As String '要设置颜色的文本
Dim MyColor As Long '要设置的颜色
Dim MyLen As Integer '要设置颜色的文本的长度
Dim arr() As Integer '存放文本串中文本的起始位置
Dim n As Integer '指定数组个数
Dim MyStart As Integer '存放各位置变量

MyStr = InputBox("请输入要修改颜色的文本:")
MyColor = GetColor
MyLen = Len(MyStr)

For Each rg In Selection
    n = 1
    ReDim arr(1 To n)
    arr(1) = 0
    Do While InStr(arr(n) + 1, rg.Value, MyStr) > 0
        MyStart = InStr(arr(n) + 1, rg.Value, MyStr)
        n = n + 1
        ReDim Preserve arr(1 To n)
        arr(n) = MyStart
    Loop
    If n > 1 Then
        For i = 2 To n
            rg.Characters(Start:=arr(i), Length:=MyLen).Font.Color = MyColor
        Next i
    End If
Next rg

End Sub

Function GetColor()

a = ActiveWorkbook.Colors(1)
Application.Dialogs(xlDialogEditColor).Show (1)
B = ActiveWorkbook.Colors(1)
ActiveWorkbook.Colors(1) = a
GetColor = B

End Function
使用时先选中指定区域,再运行宏(可指定快捷键)

然后输入要修改颜色的文字,选择要修改的颜色