Trivial ist das nicht. Ich habe was gebastelt, allerdings auf Basis einer Datei, die alt, neu und das zusammengeführte Ergebnis in jeweils getrennten Tabellenblättern enthält. Das sollte grundsätzlich auch zwischen drei Exceldateien gehen, ist aber fummelig, gerade beim Ausprobieren. Ich würde es ehrlich gesagt weiterhin in einer Datei erledigen - wenn das manuelle Kopieren nicht tragfähig ist, kann man mit VBA auch die Tabelleninhalte in einer Datei zusammenkopieren bzw. über eine Datenverbindung reinziehen.
Was zumindest für mich mit meinen Kenntnissen nicht zu lösen ist, ist die Anforderung einen unterschiedlichen Inhalt auf Buchstabenebene zu markieren. Ich habe auf die Schnelle auch keine Umsetzung in VBA im Internet gefunden. Ab der ersten Abweichung mit einem Buchstaben mehr oder weniger reicht es nicht mehr aus einfach Stelle für Stelle zu vergleichen. Ich habe für einen ersten Wurf das Verfahren hier geklaut:
http://www.herber.de/forum/archiv/1260to1264/1260531_Textvergleich_mit_Markierung_der_Unterschiede.html
Die Lösung für die Formatierungen gefällt mir irgendwie noch nicht, scheint nach meinen Tests aber zumindest zu funktionieren.
Sub zusammenstellen()
Dim alt, neu, ergebnis, vergleich1, vergleich2 As String
alt = "Alt" 'name des tabellenblatts mit den alten einträgen
neu = "Neu" ' name tabblatt neue einträge
ergebnis = "Ergebnis" 'name tabblatt ergebnisse der zusammenführung
Dim i, j, k As Long
k = 1
'zunächst das tabellenblatt alt durchgehen
For i = 1 To Sheets(alt).Cells(Rows.Count, 1).End(xlUp).Row
If WorksheetFunction.CountIf(Sheets(neu).Range("A:A"), Sheets(alt).Cells(i, 1).Value) = 0 Then 'wenn nicht im tabellenblatt neu gefunden
Sheets(ergebnis).Cells(k, 1).Value = Sheets(alt).Cells(i, 1).Value
Sheets(ergebnis).Cells(k, 2).Value = Sheets(alt).Cells(i, 2).Value
Sheets(ergebnis).Cells(k, 1).Font.Strikethrough = True
Sheets(ergebnis).Cells(k, 1).Font.Color = vbred
Sheets(ergebnis).Cells(k, 2).Font.Strikethrough = True
Sheets(ergebnis).Cells(k, 2).Font.Color = vbred
Else
'für die einträge aus "alt", die in "neu" enthalten sind prüfen ob der inhalt der 2. spalte auch gleich ist
For j = 1 To Sheets(neu).Cells(Rows.Count, 1).End(xlUp).Row
If Sheets(alt).Cells(i, 1).Value = Sheets(neu).Cells(j, 1).Value Then
Sheets(ergebnis).Cells(k, 1).Value = Sheets(neu).Cells(j, 1).Value
Sheets(ergebnis).Cells(k, 2).Value = Sheets(neu).Cells(j, 2).Value
If Sheets(alt).Cells(i, 2).Value = Sheets(neu).Cells(j, 2).Value Then 'wenn gleich:
Sheets(ergebnis).Cells(k, 1).Font.Color = vbBlack
Sheets(ergebnis).Cells(k, 2).Font.Color = vbBlack
Else 'wenn anderer inhalt in der 2. Spalte:
Sheets(ergebnis).Cells(k, 1).Font.Color = vbRed
Sheets(ergebnis).Cells(k, 2).Font.Color = vbRed
' hier die notdürftige lösung um die unterschiede zu markieren: http://www.herber.de/forum/archiv/1260to1264/1260531_Textvergleich_mit_Markierung_der_Unterschiede.html
If Len(Sheets(alt).Cells(i, 2).Value) > Len(Sheets(ergebnis).Cells(k, 2).Value) Then
txtlen = Len(Sheets(alt).Cells(i, 2).Value)
Else
txtlen = Len(Sheets(ergebnis).Cells(k, 2).Value)
End If
m = 1
For l = 2 To txtlen
vergleich1 = Mid(Sheets(alt).Cells(i, 2).Value, m, l)
vergleich2 = Mid(Sheets(ergebnis).Cells(k, 2).Value, m, l)
If vergleich1 = vergleich2 Then
Sheets(ergebnis).Cells(k, 2).Characters(m, l).Font.Color = vbBlack
End If
m = m + 1
Next
End If
Else
End If
Next j
End If
k = k + 1
Next i
'die neuen Einträge noch ergänzen, d.h. die nicht auf tabellenblatt "alt" stehen
For j = 1 To Sheets(neu).Cells(Rows.Count, 1).End(xlUp).Row 'tabelle "neu" durchgehen
If WorksheetFunction.CountIf(Sheets(alt).Range("A:A"), Sheets(neu).Cells(j, 1).Value) = 0 Then 'prüfen ob auf tab. "alt" vorhanden
Sheets(ergebnis).Cells(k, 1).Value = Sheets(neu).Cells(j, 1).Value
Sheets(ergebnis).Cells(k, 2).Value = Sheets(neu).Cells(j, 2).Value
Sheets(ergebnis).Cells(k, 1).Font.Color = vbRed
Sheets(ergebnis).Cells(k, 2).Font.Color = vbRed
k = k + 1
End If
Next j
End Sub