Isso definitivamente exigiria o VBA. A função a seguir retornará um valor de 0 a 1 (ou seja, uma porcentagem) de valores que correspondem a na mesma posição . Use isto da mesma forma que você usaria uma função interna. Você pode aplicar a formatação condicional normal a esse valor.
Ele tem um opcional True / False (padrão false) para saber se deve fazer distinção entre maiúsculas e minúsculas.
"Bob comeu o jantar" vs "Bob comeu o jantar". seria 0,66, pois não ignora a pontuação.
"Bob Bob Bob Bob" vs "Bob Bob" = 2/4 = 0,5 - quando as sequências contêm um número diferente de palavras, o maior dos dois é o denominador, mas o numerador atinge o máximo dos dois. .
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