Fehlende Werte anzeigen/Tabellen vergleichen
#1
Hallo liebe Forumsmitglieder*innen,

ich bin neben dem Studium in meinem ersten Controlling Job tätig und hab auch schon ein erstes Problem.

Ich möchte sowohl aus dem Testsystem als auch aus dem Produktivsystem von SAP quasi die gleiche Exceltabelle ziehen und diese dann vergleichen und schauen ob diese wirklich vollständig identisch sind bzw. ob Differenzen bestehen. Es handelt sich bei jeder Zeile um ca. 20 Werte, die verglichen werden sollen. Dazu kopiere ich beide Tabellen in ein Excel-Blatt nebeneinander und ziehe rechts daneben die Differenzen aus den Werten beider Tabellen.

Nun kann es aber sein, dass eine der beiden Dateien eine Zeile mehr oder weniger hat. Daher habe ich ein neues Blatt (als Hilfe) mit den Werten aus dem Produktivsystem erstellt und ziehe diese mit Hilfe eines Sverweis in das Hauptblatt, in dem ich die Differenzen analysiere, sodass die Zeilen korrekt zugeordnet werden und ich direkt erkenne, wenn eine Zeile im Produktivsystem "fehlt" bzw. nicht vorhanden ist.

Mein Problem besteht darin, dass ich auf diese Weise nicht erkennen kann, ob im Produktivsystem eine Zeile mehr als im Testsystem vorhanden ist, da diese durch den Sverweis ja nicht rübergezogen wird.

Wie kann ich diese fehlenden Werte im Hauptblatt in einer eigenen Zeile anzeigen lassen? Bzw. findet ihr, dass mein allgemeines Vorgehen Sinn macht oder habt ihr Ideen wie ich die Analyse einfacher/besser durchführen kann?

Über eure Hilfe würde ich mich sehr freuen!

Viele Grüße
Manuel :)
Antworten Top
#2
Hallo Manuel,

gibt es ein eindeutiges Datenfeld (Key) das den DS (die Zeile) eindeutig macht?

Gruß Sigi
Antworten Top
#3
Hallo

am einfachsten dürfte es über ein Makro gehen, das beide Tabellen miteinander vergleicht.  Fehler werden in Tabelle 3 aufgelistet.
Das 1. Makro vergleicht nur eine Spalte, hier A.  Die Demo Erweiterung kann beliebig viele Zellen in einer Zeile prüfen und Fehler anzeigen.
Die Erweiterung müsste dann, falls gewünscht, ins Makro 1 mit eingebaut werden.

mfg  Gast 123

Code:
Sub Tabellen_vergleichen()
Dim AC As Range, d, j, i, z As Long
Dim Tb1 As Worksheet, lz1 As Long
Dim Tb2 As Worksheet, lz2 As Long
Set Tb1 = Worksheets("Tabelle1")
Set Tb2 = Worksheets("Tabelle2")

With Worksheets("Tabelle3")
     'Änderungs Tabelle ab Zeile 2 löschen
     .UsedRange.Offset(1, 0).Clear
     .Range("B1") = "Fehlende Zeilen in Tabelle2"
     .Range("B1").Font.Bold = True
      z = 2  '1- Zeile zum Auflisten
     
     'LasdtZelle in Tabelle 1+2 ermitteln
     lz1 = Tb1.Cells(Rows.Count, 1).End(xlUp).Row
     lz2 = Tb2.Cells(Rows.Count, 1).End(xlUp).Row

     '1. Schleife für Tabelle 1 durchsuchen
     '** Kann auch auf Änderungen in den Zellen erweitert werden
     For Each AC In Tb1.Range("A2:A" & lz1)
       For j = 2 To lz2 + 1
           If AC.Value = Tb2.Cells(j, 1) Then Exit For
       Next j
       If j > lz2 Then
          .Cells(z, 1) = "Zeile " & AC.Row
          AC.Resize(1, 10).Copy .Cells(z, 2)    'kopiert A-J
          z = z + 1
       End If
     Next AC

      z = z + 3
     .Cells(z - 1, 2) = "Fehlende Zeilen in Tabelle1"
     .Cells(z - 1, 2).Font.Bold = True
     
     '2. Schleife für Tabelle 2 durchsuchen
     '** Kann auch auf Änderungen in den Zellen erweitert werden
     For Each AC In Tb2.Range("A2:A" & lz1)
       For j = 2 To lz2 + 1
           If AC.Value = Tb1.Cells(j, 1) Then Exit For
       Next j
       If j > lz2 Then
          .Cells(z, 1) = "Zeile " & AC.Row
          AC.Resize(1, 10).Copy .Cells(z, 2)    'kopiert A-J
          z = z + 1
       End If
     Next AC
End With
End Sub



Sub Demo_Erweiterung()
Dim i As integert, d As Integer
     For Each AC In Tb1.Range("A2:A" & lz1)
       For j = 2 To lz2 + 1:  d = 0
           If AC.Value <> Tb2.Cells(j, 1) Then
              For i = 1 To 5
                  If AC.Cells(0, i) <> Tb2.Cells(j, i) Then d = d + 1
              Next i
              If d > 0 Then
                 .Cells(z, 1) = "Zeile " & AC.Row & "  <>"
                 .Cells(z, 1).Font.ColorIndex = 3
                 AC.Resize(1, 10).Copy .Cells(z, 2)    'kopiert A-J
          z = z + 1
              End If
              Exit For
           End If
       Next j
       If j > lz2 Then
          .Cells(z, 1) = "Zeile " & AC.Row
          AC.Resize(1, 10).Copy .Cells(z, 2)    'kopiert A-J
          z = z + 1
       End If
     Next AC
End Sub

Nachtrag   eine Beispieldatei dazu wäre nicht schlecht. Da hat man alles sofort im Blick
Antworten Top
#4
Oder per PowerQuery (linker oder rechter Anti-Join) auswerten.

https://exceltricks.blog/die-join-arten-...-erklaert/
Cadmus
Antworten Top
#5
Hallo Manuel,

Zitat:Mein Problem besteht darin, dass ich auf diese Weise nicht erkennen kann, ob im Produktivsystem eine Zeile mehr als im Testsystem vorhanden ist ....

Wenn das ganze eine eher einmalige oder sporadische Aktion ist, läßt sich das recht einfach so bewerkstelligen:

Um auch zu überprüfen, ob im Produktivsystem eventuell mehr Zeilen als im Testsystem vorhanden sind,  kannst du einfach den SVERWEIS  in die "Gegenrichtung" machen.

Also so:
Mach dir in deinem (Hilfs-) Tabellenblatt mit den Werten aus dem Produktivsystem ein Hilfsspalte, in der per SVERWEIS zu jedem Wert die Daten aus dem Hauptblatt zugeordnet werden.
(Also gerade andersherum, wie du es bisher schon machst)
Und dann einfach mit dem Autofilter die Hilfsspalte nach "NV" filtern
Dann hast du die Werte, die im Produktivsystem vorhanden sind, aber im Testsystem fehlen.
Und das Filtrat kannst du dann auf dein Hauptabellenblatt kopieren.

Gruß
Fred
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste