Microsoft Excel

Herbers Excel/VBA-Archiv

Spalteninhalte vergleichen über zwei Tabellen | Herbers Excel-Forum


Betrifft: Spalteninhalte vergleichen über zwei Tabellen von: Constantin
Geschrieben am: 14.01.2010 22:40:45

Hallo,

ich möchte bzw. muss zwei Tabellen (Tabelle1 und Tabelle2) in einer Arbeitsmappe zeilenweise und dann Spalte für Spalte vergleichen. Spalte 3 enthält jeweils einen eindeutigen Schlüssel (Nr.).

Mir wäre schon sehr geholfen, wenn ich wüsste, wie man eine größere Anzahl von Spalteninhalten innerhalb einer Zeile zellenweise (per VBA) vergleichen kann. Z.B. hat Zeile 5 in Tabelle1 die ID-Nr. 4711 (in Spalte 3). Angenommen, diese Nr. wird in Tabelle2 in Zeile 10 (in Spalte 3) gefunden. Es sollen nun die Spalten 4-40 von Zeile 5 der Tabelle1 mit den Spalten 4-40 von Zeile 10 der Tabelle2 verglichen werden. Unterscheiden sich zwei Vergleichszellen, soll die Zelle aus Tabelle1 farblich markiert werden.

Die erste Zeile beider Tabellen enthält die jeweiligen Spaltenüberschriften.

Wie könnte so ein Vergleich einer Zeile bzw. deren Spalten mit VBA angegangen werden?

Über einen Tipp würde ich mich freuen.

Grüße, Constantin

  

Betrifft: AW: Spalteninhalte vergleichen über zwei Tabellen von: Josef Ehrensberger
Geschrieben am: 14.01.2010 23:03:17

Hallo Constantin,

ungetestet.

' **********************************************************************
' Modul: Modul5 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub vergleich()
  Dim objSh_1 As Worksheet, objSh_2 As Worksheet
  Dim vntRet As Variant, lngCol As Long, lngRow As Long, lngLast As Long
  
  On Error GoTo ErrExit
  Application.ScreenUpdating = False
  
  Set objSh_1 = Sheets("Tabelle1") 'Name der ersten Tabelle- Anpassen!
  Set objSh_2 = Sheets("Tabelle2") 'Name der zweiten Tabelle- Anpassen!
  
  With objSh_1
    'Zellfarben löschen
    .UsedRange.Interior.ColorIndex = xlNone
    'Letzte Datenzeile in "Tabelle1" ermitteln
    lngLast = Application.Max(2, .Cells(.Rows.Count, 1).End(xlUp).Row)
    
    'Zeilen durchlaufen
    For lngRow = 2 To lngLast
      'Fortschrittsmeldung in der Statuszeile
      Application.StatusBar = "Vergleiche Datensatz " & CStr(lngRow - 1) & " von " _
        & CStr(lngLast - 1) & " --- Bitte warten ---"
      'ID in "Tabelle2" suchen
      vntRet = Application.Match(.Cells(lngRow, 3), objSh_2.Columns(3), 0)
      
      'ID gefunden
      If IsNumeric(vntRet) Then
        'Spalten durchlaufen
        For lngCol = 4 To 40
          'Bei Unterschied markieren
          If .Cells(lngRow, lngCol) <> objSh_2.Cells(vntRet, lngCol) Then
            .Cells(lngRow, lngCol).Interior.ColorIndex = 6
          End If
        Next
      End If
    Next
  End With
  
  ErrExit:
  Application.ScreenUpdating = True
  Application.StatusBar = False
  Set objSh_1 = Nothing
  Set objSh_2 = Nothing
End Sub



Gruß Sepp



  

Betrifft: AW: Spalteninhalte vergleichen über zwei Tabellen von: Constantin
Geschrieben am: 16.01.2010 12:15:49

Hallo Sepp,

ich wollte Dir gleich am Abend noch eine Antwort geben, dann haben das System (oder eher meine Fähigkeiten) versagt. Also, verspätet Danke für die superschnelle und so prägnante Lösung!!! Damit kann ich bestens weiterarbeiten.

Gruß, Constantin


  

Betrifft: AW: Spalteninhalte vergleichen mit Kommentarfeld von: Constantin
Geschrieben am: 18.01.2010 17:02:23

Hallo Sepp oder wer es wissen könnte,

darf ich hier doch noch eine Nachfrage stellen? Wenn ich nun noch einbauen möchte, dass beim Vergleich beider Tabellen bzw. deren Spalteninhalte (im Falle von Unterschied) neben der farblichen Markierung noch ein Kommentarfeld in der gleichen Zelle von Tabelle1 erzeugt wird und dort der Vergleichswert von Tabelle2 eingetragen werden soll - wie müsste das Programm abgeändert werden?

Da beim Vergleich beider Tabellen es noch sein kann, dass Tabelle2 Sätze enthält, die in Tabelle1 nicht vorkommen, habe ich noch nachstehende kleine Programmergänzung vorgenommen ('Constantin).

Die Zeilen, die in Tabelle2 kein "X" bekommen haben, sollten nun noch an Tabelle1 angehängt und rot markiert werden.

Gruß, Constantin
und vielen Dank für eure Unterstützung.


'ID gefunden
If IsNumeric(vntRet) Then
'Spalten durchlaufen
For lngCol = 4 To 40
'Bei Unterschied markieren
If .Cells(lngRow, lngCol) <> objSh_2.Cells(vntRet, lngCol) Then
.Cells(lngRow, lngCol).Interior.ColorIndex = 6

.Cells(lngRow, 41).Value = "Änderung" 'Constantin
End If
Next

objSh_2.Cells(vntRet, 41).Value = "X" ' Constantin
End If


  

Betrifft: AW: Spalteninhalte vergleichen mit Kommentarfeld von: Constantin
Geschrieben am: 18.01.2010 18:03:06

... Kommentarfeld habe ich reingebracht (habe mich wohl selbst übertroffen). Ich versuche mich noch am Rest (fehlende Zeilen von Tabelle2 zum Schluss noch an Tabelle1 anhängen und markieren).

Gruß, Constantin


Beiträge aus den Excel-Beispielen zum Thema "Spalteninhalte vergleichen über zwei Tabellen"