Это определенно потребует VBA. Следующая функция вернет значение от 0 до 1 (то есть в процентах) от значений, которые совпадают в той же позиции. Используйте это так же, как если бы вы использовали встроенную функцию. Затем вы можете применить нормальное условное форматирование к этому значению.
Он имеет необязательное значение True/False (по умолчанию false), указывающее, нужно ли учитывать регистр символов.
"Боб ел ужин" против "Боб ел ужин". будет 0,66, так как он не игнорирует пунктуацию.
"Боб Боб Боб Боб" против "Боб Боб" = 2/4 = 0,5 - если в строках содержится разное количество слов, знаменатель имеет большее из двух значений, но числитель достигает максимума при меньшем из двух значений.
Function ScorePair(stringInput As String, stringTarget As String, Optional caseSensitive As Boolean = False) As Double
Dim scoreNum As Integer
Dim scoreDen As Integer
Dim splitInput As Variant
Dim splitTarget As Variant
Dim theScore As Double
Dim sizeTarget As Integer
Dim sizeInput As Integer
Dim loopSize As Integer
'Initialize
scoreNum = 0
i = 0
'Extract strings into arrays of words
splitInput = Split(stringInput, " ")
splitTarget = Split(stringTarget, " ")
'Get sizes of arrays to know how much to loop (smaller of two) and what to set denominator at (bigger of two)
sizeInput = UBound(splitInput, 1)
sizeTarget = UBound(splitTarget, 1)
scoreDen = WorksheetFunction.Max(sizeTarget, sizeInput) + 1
loopSize = WorksheetFunction.Min(sizeTarget, sizeInput)
'Loop through arrays comparing them by matching position
For i = i To loopSize
If caseSensitive Then
If splitInput(i) = splitTarget(i) Then
scoreNum = scoreNum + 1
End If
ElseIf LCase(splitInput(i)) = LCase(splitTarget(i)) Then
scoreNum = scoreNum + 1
End If
Next
'Calculate the score as percentage
theScore = scoreNum / scoreDen
ScorePair = theScore
End Function