Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
720to724
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
720to724
720to724
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Tabellen vergleichen

Tabellen vergleichen
18.01.2006 17:25:09
Peter78
Hallo,
gibt es eine Möglichkeit (kann auch VBA sein) in Excel zwei komplette Tabellen miteinander zu vergleichen und die Unterschiede zu markieren/auszugeben? Der Hintergrund ist, dass ich immer mal wieder verschiedene Versionen von Exceltabellen habe, wo ich herausfinden muss, was sich geändert hat. Oder gibt es dafür schon eine Excelstandardlösung die ich noch nicht kenne?
Mit Verweisformeln komme ich nicht weiter, da es auch vorkommt, das mittendrin neue Zeilen oder Spalten eingeschoben wurden.
Auch das durchlaufen aller Zellen (bzw. Array) mit einer VBA-Schleife scheint mir aus Laufzeitgründen etwas zu rechenintesiv. Auch ist das Auffinden des alten Textes nach einer eingeschobenen Zeile/Spalte nicht ganz trivial.
Bei Texteditoren gibt es doch wohl so einen Vergleich!? Nur habe ich keinen solchen und zweitens ist mir der Umweg (wenn er denn nicht zwingend notwendig ist) zu umständlich.
Ich suche etwas universelles: in Excel Knopf drücken, Abfrage nach den zwei zu vergleichenden Sheets und (realativ unabhängig von der Datengröße) ein Ergebnis. Ich möchte auch kein auf eine spezielle Tabelle angepasstes Makro.
Hat jemand eine Idee für mich?
Gruß Peter

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellen vergleichen
18.01.2006 17:46:10
Josef
Hallo Peter!
Braucht bei 1.000.000 Zellen, weniger als eine Sekunde!
Sub vergleichMatrix()
Dim arr1 As Variant
Dim arr2 As Variant
Dim wks1 As Worksheet
Dim wks2 As Worksheet
Dim strRange As String
Dim n As Long, m As Long

strRange = "A1:CV10000" 'Bereich der verglichen wird - anpassen

Set wks1 = Sheets("Tabelle1")
'Tabelle1 - anpassen
Set wks2 = Sheets("Tabelle2")
'Tabelle2 - anpassen, in dieser Tabelle wird gekennzeichnet!

arr1 = wks1.Range(strRange)
arr2 = wks2.Range(strRange)

For m = 1 To UBound(arr1, 2)
  For n = 1 To UBound(arr1, 1)
    If arr1(n, m) <> arr2(n, m) Then
      wks2.Range(strRange).Cells(n, m).Interior.ColorIndex = 6
    End If
  Next
Next
End Sub


'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

Anzeige
AW: Tabellen vergleichen
18.01.2006 23:41:21
Peter78
Hallo Sepp,
danke für deine schnelle Antwort.
Ich hatte bis jetzt nicht die Erfahrung gemacht, dass Arrays so schnell sind. Aber das Problem sind ja auch immer die Zellmanipulationen. Ich habe diesbezüglich dein Scriptentwurf auch noch etwas verfeinert.
Das Grundproblem ist aber trotzdem, dass es ja nur einen Vergleich der fixen Zellen durchführt. Wenn mitten im Range eine Zeile eingeschoben wurde, werden alle nachfolgenden als unterschiedlich ausgegeben. Leider habe ich derzeit keine gute Idee, wie man den ja nur verschobenen Teil sicher wieder auffindet. Es können ja beliebig viele Zeilen, Spalten oder gar nur einzelne Zellen eingeschoben worden sein. In solch einem Fall sollen natürlich nur die eingeschobenen Teile/Zellen als unterschiedlich markiert werden und nicht alles nachfolgende.
Ich suche keinen Vergleich von Inhalt _und_ Position sondern lediglich einen inhaltlichen Vergleich!
Hier mein überarbeitetes Script:
(Wie kann man das eigentlich so schön einfügen?)
Option Base 1

Sub vergleichMatrix()
Dim arr1 As Variant
Dim arr2 As Variant
Dim wks1 As Worksheet
Dim wks2 As Worksheet
Dim n As Long, m As Long, n_end As Long, m_end As Long
Dim ergebnis As Range
Beginn = Now
Application.ScreenUpdating = False
Set wks1 = Sheets("Tabelle1") 'Tabelle1 - anpassen
Set wks2 = Sheets("Tabelle2") 'Tabelle2 - anpassen, in dieser Tabelle wird gekennzeichnet!
arr1 = wks1.UsedRange 'Arrays laden
arr2 = wks2.UsedRange
If UBound(arr1, 2) > UBound(arr2, 2) Then 'ermitteln des größeren Bereichs
m_end = UBound(arr1, 2)
Else
m_end = UBound(arr2, 2)
End If
If UBound(arr1, 1) > UBound(arr2, 1) Then
n_end = UBound(arr1, 1)
Else
n_end = UBound(arr2, 1)
End If
ReDim arr1(n_end, m_end)  'Arrays neu dimensionieren
ReDim arr2(n_end, m_end)
wks1.Activate 'Arrays nach ReDim neu einlesen
arr1 = wks1.Range(Cells(1, 1), Cells(n_end, m_end))
wks2.Activate
arr2 = wks2.Range(Cells(1, 1), Cells(n_end, m_end))
For m = 1 To m_end  'ErgebnisRange bilden
For n = 1 To n_end
If arr1(n, m) <> arr2(n, m) Then
If ergebnis Is Nothing Then
Set ergebnis = wks2.Cells(n, m)
Else
Set ergebnis = Union(ergebnis, wks2.Cells(n, m))
End If
End If
Next
Next
ergebnis.Interior.ColorIndex = 6  'ErgebnisRange manipulieren
Application.ScreenUpdating = True
Antwort = MsgBox("Laufzeit: " & Format(Now - Beginn, "hh:mm:ss"), vbOKOnly) 'Zeitausgabe nur für Testzwecke
End Sub

Anzeige
AW: Tabellen vergleichen
19.01.2006 01:42:02
Josef
Hallo Peter!
Vileicht wäre das etwas für dich!
http://www.synkronizer.com/index_d.html
'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

AW: Tabellen vergleichen
19.01.2006 11:53:34
Peter78
Hallo Sepp,
Bingo, genau das ist es!
Nur würde ich das gern in meine eigene xla integriert haben und keine externe Sache nutzen (geht wahrscheinlich sowieso auf meinem Firmenrechner nicht).
Wenn es da nur eine offene Variante gäbe!
Ich verstehe sowieso nicht, warum Microsoft das nicht selbst in Excel eingebaut hat. In Word gibt es ja schließlich auch einen Vergleich.
Mir würde die Funktionalität der Light Version ausreichen, wobei die Standard Version auch schön wäre (die müsste aber eigentlich bei dem Code dann automatisch mit abfallen).
Noch einmal, wie kann man Scripte in diese NG so schön formatiert einfügen?
Gruß
Peter
Anzeige
AW: Tabellen vergleichen
19.01.2006 12:02:09
Josef
Hallo Peter!
Wenn du mal nach "tabellen vergleichen excel" googelst, dann findest du bestimmt noch mehr!
Vielleicht ist auch was mit offenem Code dabei.
Das Tool das ich verwende, gibt's so (noch) nicht zum Download,
aber schau mal hier: http://rtsoftwaredevelopment.de/
unter Freeware-SyntaxHigh
oder hier: http://www.online-excel.de/excel/down.php
Gruß Sepp
AW: Tabellen vergleichen
19.01.2006 13:33:29
Peter78
Hallo Sepp,
gegoogelt habe ich schon bis der Arzt kam. Man findet nur Teilvergleiche und vor allem nur welche die Position _und_ Inhalt vergleichen!
Gruß
Peter
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige