Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1080to1084
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
Inhaltsverzeichnis

Zwei Dateien vergleichen

Zwei Dateien vergleichen
18.06.2009 23:22:05
Peter
Hallo wertes Forum,
ich brauche Ansatzhilfe.
Ich möchte gern mittels Makro 2 Dateien vergleichen
Öffne Datei 1 öffne Datei 2 und vergleiche die Änderung jeweil in Tabelle1 in Spalte D
Beide Datei sind ca 48000 Zeilen groß.
Datei 1 wäre die Masterdatei und die Änderungen aus Datei 2 sollten dann in Datei 3 geschrieben werden.
Ich tun mich etwas schwer einen Anfang zubekommen
Bin für jede Starthilfe dankbar
Gruß Peter

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zwei Dateien vergleichen
18.06.2009 23:42:59
Ramses
Hallo
Warum sollen die Änderungen in eine 3. Datei geschrieben werden, wenn Datei1 doch die Masterdatei ist ?
Diese sollte doch eigentlich die aktualisierten Werte anschliessend beinhalten ?
Im Prinzip eine Schleife bauen
Option Explicit

Sub Sample()
    Dim i As Long
    Dim wkb1 As Workbook, wkb2 As Workbook, wkb3 As Workbook
    Dim wks1 As Worksheet, wks2 As Worksheet, wks3 As Worksheet
    Workbooks.Open "D:\Mastermappe.xls"
    Workbooks.Open "D:\Änderungsmappe.xls"
    Set wkb1 = Workbooks("Mastermappe.xls")
    Set wks1 = wkb1.Worksheets("Prüftabellenname")
    Set wkb2 = Workbooks("Änderungsmappe.xls")
    Set wks2 = wkb2.Worksheets("Änderungstabellenname")
    Set wkb3 = Workbooks.Add
    Set wks3 = wkb3.Worksheets(1)
    With wks1
        For i = 1 To .Cells(Rows.Count, 4).End(xlUp).Row
            If .Cells(i, 4) <> wks2.Cells(i, 4) Then
                wks2.Rows(i).Copy wks3.Cells(wks3.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1)
            End If
        Next i
    End With
End Sub

Wird ein Unterschied gefunden, wird die ganze Zeile kopiert
Ungetestet, aber als Ansatz brauchbar
Gruss Rainer
Anzeige
AW: Zwei Dateien vergleichen
18.06.2009 23:48:02
Josef
Hallo Peter,
als Ansatz.
' **********************************************************************
' Modul: Modul4 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub DatenVergleich()
  Dim objWB1 As Workbook, objWB2 As Workbook
  Dim objWS As Worksheet
  Dim lngIndex As Long, lngLast As Long, lngRow As Long
  Dim varV1 As Variant, varV2 As Variant, varResult As Variant
  
  On Error GoTo ErrExit
  GMS
  
  Set objWB1 = Workbooks.Open("E:\Office\Excel\Forum\Test\Datei1.xls") 'erste Datei - Name&Pfad anpassen!
  Set objWB2 = Workbooks.Open("E:\Office\Excel\Forum\Test\Datei2.xls") 'erste Datei - Name&Pfad anpassen!
  
  lngLast = Application.Max(2, objWB1.Sheets("Tabelle1").Cells(Rows.Count, 4).End(xlUp).Row, objWB2.Sheets("Tabelle1").Cells(Rows.Count, 4).End(xlUp).Row)
  
  varV1 = objWB1.Sheets("Tabelle1").Range("D2:D" & lngLast)
  varV2 = objWB2.Sheets("Tabelle1").Range("D2:D" & lngLast)
  Redim varResult(1 To lngLast + 1, 1 To 2)
  
  objWB1.Close
  objWB2.Close
  
  varResult(1, 1) = "Datei 1"
  varResult(1, 2) = "Datei 2"
  lngRow = 2
  
  For lngIndex = 1 To UBound(varV1, 1)
    If varV1(lngIndex, 1) <> varV2(lngIndex, 1) Then
      varResult(lngRow, 1) = varV1(lngIndex, 1)
      varResult(lngRow, 2) = varV2(lngIndex, 1)
      lngRow = lngRow + 1
    End If
  Next
  
  
  With ThisWorkbook.Sheets("Tabelle1")
    .Range("A1:B" & lngLast + 1) = varResult
  End With
  
  ErrExit:
  With Err
    If .Number <> 0 Then MsgBox "Fehler " & .Number & vbLf & vbLf & _
      .Description & vbLf & vbLf & "In Prozedur (DatenVergleich) in Modul Modul4", _
      vbExclamation, "Fehler in Modul4 / DatenVergleich"
  End With
  
  GMS True
  
End Sub

Public Sub GMS(Optional ByVal Modus As Boolean = False)
  
  Static lngCalc As Long
  
  With Application
    .ScreenUpdating = Modus
    .EnableEvents = Modus
    .DisplayAlerts = Modus
    .EnableCancelKey = IIf(Modus, 1, 0)
    If Not Modus Then lngCalc = .Calculation
    If Modus And lngCalc = 0 Then lngCalc = -4105
    .Calculation = IIf(Modus, lngCalc, -4135)
    .Cursor = IIf(Modus, -4143, 2)
    
  End With
  
End Sub

Gruß Sepp

Anzeige
AW: Zwei Dateien vergleichen
19.06.2009 12:13:48
Peter
Hallo
erstmal danke für Eure Hilfe
Leider klappen die beiden Makro nicht
Die Dateien werden geöffnet,
aber es werden keine Unterschiedegefunden
Gruß Peter
AW: Zwei Dateien vergleichen
19.06.2009 21:42:49
Josef
Hallo Peter,
das iegt dann wohl an deien Daten. Lade doch ein Beispiel hoch.
Gruß Sepp

AW: Zwei Dateien vergleichen
19.06.2009 22:59:14
Peter
Hallo
lade mal den Kopf von Datei 1.
Datei 2 ist genau die gleiche nur mit unterschiedlichen Werten in Spalte D
Das Makro habe ich in der persönl.xls Datei gepeichert und in der Menueleisten einem Icon zugewiesen.
Woche zu Woche bekomme ich eine neue Datei und die unterschieden müssen erkannt und in einer 3. Datei zur weiteren Bearbeitung zur Verfügung stehen.
https://www.herber.de/bbs/user/62586.xls
Hier das Makro bin kein großer Makro-Experte
Sub DatenVergleich()
Dim objWB1 As Workbook, objWB2 As Workbook
Dim objWS As Worksheet
Dim lngIndex As Long, lngLast As Long, lngRow As Long
Dim varV1 As Variant, varV2 As Variant, varResult As Variant
On Error GoTo ErrExit
GMS
Set objWB1 = Workbooks.Open("d:\Dokumente und Einstellungen\Knierim.Peter\Desktop\Inventuren\Datei1.xls") 'erste Datei - Name&Pfad anpassen!
Set objWB2 = Workbooks.Open("d:\Dokumente und Einstellungen\Knierim.Peter\Desktop\Inventuren\Datei2.xls") 'erste Datei - Name&Pfad anpassen!
lngLast = Application.Max(2, objWB1.Sheets("Tabelle1").Cells(Rows.Count, 4).End(xlUp).Row, objWB2.Sheets("Tabelle1").Cells(Rows.Count, 4).End(xlUp).Row)
varV1 = objWB1.Sheets("Tabelle1").Range("D2:D" & lngLast)
varV2 = objWB2.Sheets("Tabelle1").Range("D2:D" & lngLast)
ReDim varResult(1 To lngLast + 1, 1 To 2)
objWB1.Close
objWB2.Close
varResult(1, 1) = "Datei 1"
varResult(1, 2) = "Datei 2"
lngRow = 2
For lngIndex = 1 To UBound(varV1, 1)
If varV1(lngIndex, 1) varV2(lngIndex, 1) Then
varResult(lngRow, 1) = varV1(lngIndex, 1)
varResult(lngRow, 2) = varV2(lngIndex, 1)
lngRow = lngRow + 1
End If
Next
With ThisWorkbook.Sheets("Tabelle1")
.Range("A1:B" & lngLast + 1) = varResult
End With
ErrExit:
With Err
If .Number 0 Then MsgBox "Fehler " & .Number & vbLf & vbLf & _
.Description & vbLf & vbLf & "In Prozedur (DatenVergleich) in Modul Modul4", _
vbExclamation, "Fehler in Modul4 / DatenVergleich"
End With
GMS True
End Sub



Public Sub GMS(Optional ByVal Modus As Boolean = False)
Static lngCalc As Long
With Application
.ScreenUpdating = Modus
.EnableEvents = Modus
.DisplayAlerts = Modus
.EnableCancelKey = IIf(Modus, 1, 0)
If Not Modus Then lngCalc = .Calculation
If Modus And lngCalc = 0 Then lngCalc = -4105
.Calculation = IIf(Modus, lngCalc, -4135)
.Cursor = IIf(Modus, -4143, 2)
End With
End Sub


Anzeige
AW: Zwei Dateien vergleichen
20.06.2009 10:08:56
Peter
Hallo Sepp,
habe es jetzt soweit hinbekommen.
Jetzt geht es an das Feintunning,
Das Makro habe ich für die Spalte AQ um geschreiben und es gibt mir genau die Unterschiede in der neuen Datei wieder.
Frage:
Es es auch möglich die ganze Zeile (wo Unterschiede gefunden worden) oder in der Zeile einzelne Zellen zur Identifizierung mit in die neue Datei zuschreiben?
Vielleicht eine Erklärung: Eine Datei wird jede Woche aktualisiert aus Accsess bereitgestellt und aus den Unterschieden muss ein Monitoring wieviel sich geändert hat und bei wem erstellt werden.
Die Daten aus der neuen Datei werden dann in eine weitere Datei geschrieben
Gruß Peter
Anzeige
AW: Zwei Dateien vergleichen
20.06.2009 10:35:05
Josef
Hallo Peter,
klar geht das, wenn du die ganze Zeile "mitnehmen" willst, würde ich aber einen anderen Code verwenden.
Wenn nur einzelne Zellen mit in die neue Date geschrieben werden sollen, dann würde ich dafür einfach die
entsprechenden Spalten in ein extra Array einlesen und die Daten einfach zum Ausgabearray dazuschreiben.
Beispiel:
  varV1 = objWB1.Sheets("Tabelle1").Range("D2:D" & lngLast)
  varV2 = objWB2.Sheets("Tabelle1").Range("D2:D" & lngLast)
  varV3 = objWB2.Sheets("Tabelle1").Range("A2:A" & lngLast) 'Daten aus Spalte A
  varV4 = objWB2.Sheets("Tabelle1").Range("H2:H" & lngLast) 'Daten aus Spalte H
  Redim varResult(1 To lngLast + 1, 1 To 4) 'Ausgabearray muss die entsprechende Spaltenanzahl enthalten!
  
  '--
  
  For lngIndex = 1 To UBound(varV1, 1)
    If varV1(lngIndex, 1) <> varV2(lngIndex, 1) Then
      varResult(lngRow, 1) = varV1(lngIndex, 1)
      varResult(lngRow, 2) = varV2(lngIndex, 1)
      'Zusatzdaten
      varResult(lngRow, 3) = varV3(lngIndex, 1)
      varResult(lngRow, 4) = varV4(lngIndex, 1)
      lngRow = lngRow + 1
    End If
  Next
End Sub

'--

'Spaltenabzahl des AUsgabebereiches muss natürlich auch angepasst werden!
With ThisWorkbook.Sheets("Tabelle1")
  .Range("A1:D" & lngLast + 1) = varResult
End With

Gruß Sepp

Anzeige
AW: Zwei Dateien vergleichen
20.06.2009 22:23:14
Peter
Hallo super es klappt vielen Dank bis bald Peter
AW: Zwei Dateien vergleichen
20.06.2009 23:55:09
Peter
Hallo,
ich hätte da noch eine Bitte.
Im Makro sind die Pfade der Dateien angegeben. Kann man das Makro auch so bauen, das man über den "Dialog Datei öffnen" die beiden Dateien einlesen kann?
Die Namen der Tabellenblätter sind immer gleich.
Gruß und nochmals vielen dank
Peter
AW: Zwei Dateien vergleichen
21.06.2009 07:34:35
Josef
Hallo Peter,
dazu musst du dies einfügen.
'--
Dim strFile1 As String, strFile2 As String

strFile1 = Application.GetOpenFilename("Excel Dateien (*.xls; *.xlsx; *.xlsm)," & _
  "*.xls; *.xlsx; *.xlsm", Title:="Wählen Sie Datei 1")

If strFile1 = "Falsch" Then Exit Sub

strFile2 = Application.GetOpenFilename("Excel Dateien (*.xls; *.xlsx; *.xlsm)," & _
  "*.xls; *.xlsx; *.xlsm", Title:="Wählen Sie Datei 2")

If strFile2 = "Falsch" Then Exit Sub

'--

On Error GoTo ErrExit
GMS

Set objWB1 = Workbooks.Open(strFile1)
Set objWB2 = Workbooks.Open(strFile2)
'...

Gruß Sepp

Anzeige
AW: Zwei Dateien vergleichen
21.06.2009 08:04:02
Peter
Hallo Sepp,
Auch das Klappt dafür danke am frühen morgen.
Jetzt habe ich aber noch ein weiteres Problem.
Das Makro liegt in der Mappe1 und wird gestartet. Alles klappt und die Unterschiede werden in die Mappe geschrieben.
Jetzt habe ich das Makro in einem Modul in meiner persönl.xls Datei eingebaut. In der Menue leiste ein neues Menue mit einer Schaltfläche und dann das Makro zugewiesen.
Jetzt klappt das ganze schon nicht mehr.
Keine Unterschiede werden in eine Datei geschrieben
Gruß Peter
AW: Zwei Dateien vergleichen
21.06.2009 08:09:32
Josef
Hallo Peter,
die Daten werden schon in die Datei geschrieben, aber eben in die "personl.xls".
Willst du die Daten immer in die aktive Datei schreiben, dann musst du statt
With ThisWorkbook.Sheets("Tabelle1")

einfach
With ActiveWorkbook.Sheets("Tabelle1")

schreiben.
Gruß Sepp

Anzeige
AW: Zwei Dateien vergleichen
21.06.2009 08:38:22
Peter
Hallo Sepp
vielen Dank das wars
Nochmals recht Herzlichen dank
Gruß Peter
zu
21.06.2009 09:04:42
Josef
Gruß Sepp

43 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige