Estou comparando alguns dados sobre tipos de diferenças: adições e exclusões. Eu usei algum código de um thread anterior para comparar duas strings e encontrar diferença; e simplesmente trocou os argumentos WORDDIF de acordo.
= WORDDIF (A1, B1)
Código:
Function WORDDIF(rngA As Range, rngB As Range) As String
Dim WordsA As Variant, WordsB As Variant
Dim ndxA As Long, ndxB As Long, strTemp As String
WordsA = Split(rngA.Text, " ")
WordsB = Split(rngB.Text, " ")
For ndxB = LBound(WordsB) To UBound(WordsB)
For ndxA = LBound(WordsA) To UBound(WordsA)
If StrComp(WordsA(ndxA), WordsB(ndxB), vbTextCompare) = 0 Then
WordsA(ndxA) = vbNullString
Exit For
End If
Next ndxA
Next ndxB
For ndxA = LBound(WordsA) To UBound(WordsA)
If WordsA(ndxA) <> vbNullString Then strTemp = strTemp & WordsA(ndxA) & " "
Next ndxA
WORDDIF = Trim(strTemp)
End Function
No entanto, cheguei a alguns obstáculos.
Código atualizado
Código:
Function WORDDIF(rngA As Range, rngB As Range) As String
'Remove linefeed characters and exclude parentheticals
Dim WordsA As Variant, WordsB As Variant
Dim ndxA As Long, ndxB As Long, strTemp As String
WordsA = Split(Replace(rngA.Text, vbLf, " "), " ") 'remove linefeed
WordsB = Split(Replace(rngB.Text, vbLf, " "), " ") 'remove linefeed
For ndxB = LBound(WordsB) To UBound(WordsB)
For ndxA = LBound(WordsA) To UBound(WordsA)
If StrComp(WordsA(ndxA), WordsB(ndxB), vbTextCompare) = 0 Then
WordsA(ndxA) = vbNullString
Exit For
End If
Next ndxA
Next ndxB
For ndxA = LBound(WordsA) To UBound(WordsA)
'Exclude parentheticals
If Not WordsA(ndxA) Like "(*)" Then strTemp = strTemp & WordsA(ndxA) & " "
Next ndxA
WORDDIF = Application.Trim(strTemp)
End Function
O código parece ótimo. Eu tenho algumas alterações que gostaria de fazer:
Por fim, seria interessante imprimir uma nova coluna com: adições (em itálico) e exclusões (passagem). Em vez de ter uma coluna de exclusões ou adições (o que é ótimo ver visualmente), eu queria saber se há um código que sintetiza as informações, de modo que a saída é: todos os nomes de escola, com exclusões (greve), adições (em itálico) ), e repete (sem alteração = normal).
Cada escola é separada (para a coluna adições / exclusões). Eu acho que eles vêm apenas como uma lista sem qualquer técnica de separação. Então, cada um tem sua própria linha dentro da célula ou separada por uma coluna. Talvez uma vírgula pudesse substituir o duplo entre parênteses.
Exemplos para acompanhar os itens acima:
B6 = * (os blocos representam células do Excel)
Med Col of Georgia (1) (AC) Morehouse (1) (AC)
D6 =
Med Col of Georgia (1) (AC) Meharry (1) (AC)
Deletions
G6 = WORDDIF (D6, B6)
Meharry
Adições
H6 = WORDDIF (B6, D6)
Morehouse
I6 = {novo código ou algo assim}
Med Col of Georgia, Morehouse, Meharry*
* Nota: não consegui descobrir como atacar Meharry, então sublinhei. Observe também que há vírgulas separando as escolas na lista final. Talvez isso possa ser feito com a substituição do conjunto de parênteses por vírgulas.
B91 =
Columbia (1) (AC) Northwestern (1) (AC) Southern Calif (1) (AC) U Chicago-Pritzker (1) (AC) U Michigan (1) (AC) Wash U St Louis (1) (AC)
D91 =
Northwestern (1) (AC) Southern Calif (1) (AC) U Chicago-Pritzker (1) (AC) U Michigan (1) (AC)
H91 == WORDDIF (B91, D91)
Columbia Wash U St Louis
{versão melhorada}
H91 == WORDDIF (B91, D91)
Columbia Wash U St Louis
OR
Columbia, Wash U St Louis
Observe os espaços no primeiro exemplo e a vírgula no segundo.
Felicidades por toda a sua ajuda.
Além disso, eu fiz um pouco de codificação de volta no dia. Enquanto eu estou um pouco enferrujado, seria bom aprender a codificar para o Excel. Se você tiver quaisquer ponteiros ou recursos, isso seria útil.