Проблемы с подстрокой могут быть сложными, если их немного сверлить.Например, в примере OP подстрока KKYKDKSK также является правильной подстрокой KK * K , таким образом, она, вероятно, также может иметь цветовую кодировку.
В общем, с некоторыми ограничениями задача, такая как поиск неперекрывающихся подстрок и учитывая, что подстрока присутствует один раз на строку, это возможно:
![enter image description here](https://i.stack.imgur.com/0eRa2.png)
При некотором жестком кодировании переменных и проверке только на KK * K , вот как выглядит основной метод:
Option Explicit
Sub TestMe()
Dim myRange As Range: Set myRange = Worksheets(1).Range("A1:A2")
Dim myCell As Range
For Each myCell In myRange
myCell.Font.Bold = False
Dim subString As String
subString = findTheSubString(myCell.Value2, "KK*K")
Debug.Print myCell.text, subString
ChangeTheFont subString, myCell, vbBlue
Next myCell
End Sub
Функция findTheSubString()
берет 2 строки и возвращает подстроку, которая будет помечена цветом позже:
Public Function findTheSubString(wholeString As String, subString As String) As String
Dim regEx As Object
Dim inputMatches As Object
Dim regExString As String
Set regEx = CreateObject("VBScript.RegExp")
With regEx
.Pattern = Split(subString, "*")(0) & "[\s\S]*" & Split(subString, "*")(1)
.IgnoreCase = True
.Global = True
Set inputMatches = .Execute(wholeString)
If regEx.test(wholeString) Then
findTheSubString = inputMatches(0)
Else
findTheSubString = "Not Found!"
End If
End With
End Function
Последняя часть заключается в изменении шрифта определенной подстроки в диапазоне Excel, поэтому аргументы являются строкойи диапазон:
Sub ChangeTheFont(lookFor As String, currentRange As Range, myColor As Long)
Dim startPosition As Long: startPosition = InStr(1, currentRange.Value2, lookFor)
Dim endPosition As Long: endPosition = startPosition + Len(currentRange.Value2)
With currentRange.Characters(startPosition, Len(lookFor)).Font
.Color = myColor
.Bold = True
End With
End Sub