Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Excel Stücklisten vergleichen

Forumthread: Excel Stücklisten vergleichen

Excel Stücklisten vergleichen
16.04.2021 08:07:22
Thomas
Hallo zusammen,
erstaml vielen Dank für dieses tolle Forum, mit der Hilfe von älteren Beiträgen konnte ich bereits ein Excelmappe erstellen, die es ermöglicht zwei Stücklisten /BOM miteinander zu vergleichen. Der Inhalt der Stücklisten wird in die Vergleichsmappe importiert, auf der linken Seite die alte Verseion (Stückliste_1) und auf der rechten Seite die neue Version (Stückliste_2). Der Vergleich löscht Artikel die keine Änderung in Anzahl und Identnummer aufweisen aus der Tabelle und als Ergebnis bleiben die Artikel stehen, die entweder in einer der Beiden Stücklisten nicht vorhanden sind oder sich die Menge unterscheidet. Allerdings gibt es noch ein Problem, für das ich bisher keine Lösung gefunden habe:
Die Stücklisten werden automatisch aus einem CAE Programm erstellt. Wenn es CAE Projekte mit mehreren Schaltschränken gibt, werden in die Stücklisten auch die Bauteile mehrerer Schaltschränke in eine Liste ausgegeben. In den beiden Beispielstücklisten sieht man das an der Kennzeichnung +C1 und alles unter der Zeile mit +C2 stammt aus dem zweiten Schaltschrank. Das Problem ist jetzt folgendes:
Wenn nur ein Schaltschrank vorhanden ist (also nur +C1), funktioniert der Vergleich. Sobald aber ein zweiter Schrank +C2 enthalten ist, erkennt das vba Programm Bauteile die sowohl in +C1 vorhanden sind, also auch in +C2 vorhanden sind aber mit unterschiedlichen Stückzahlen, als Differenz. Das Programm dürfte also immer nur bis zur Zeile mit +C2 suchen und dann ab +C2 die Auswertung erneut starten usw... Dabei müsste sichergestellt werden, das der Bereich zwischen +C1 und +C2 aus Stückliste_1 auch nur mit dem Bereich +C1 bis +C2 aus der Stückliste_2 verglichen wird und nicht mit +C2 und +C3 etc..
Ich hoffe die Beschreibung war einigermaßen verständlich :-)
Vergleichsmappe: https://www.herber.de/bbs/user/145567.xlsm
Stückliste 1: https://www.herber.de/bbs/user/145563.xlsx
Stückliste 2: https://www.herber.de/bbs/user/145568.xlsx
Screenhsot von der Stücklistenvergleichsmappe:

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Excel Stücklisten vergleichen
17.04.2021 20:29:25
Piet
Hallo Thomas
ich habe mal einen eigenen Code entwickelt und bitte dich ihn zu testen. Den habe ich in "Modul 1" entwickelt, OHNE die Stückliste Öffnen Routine. Das Priznzip wird dir sicher schnell klar sein. Zwei ineinanderlaufende For Next Scjleifen ohne Find, die aber immer nur den Bereich von "+C1" oder "+C2" durchsuchen. Mit Find ist das nicht möglich.
Würde mich freuen wenn ihr mit dieser Idee das Problem endlich lösen könnt.
mfg Piet
mfg Piet
  • 
    Sub Stücklisten_vergleichen()
    ' Werte Neu mit Alt vergleichen
    Dim wks As Worksheet, varPart As Variant
    Dim ZeileA As Long, ZeileH As Long
    Dim lazA As Long, lazH As Long
    Dim azC2 As Long, hzC2 As Long
    Set wks = ThisWorkbook.Worksheets("Auswertung2")
    With wks
    lazA = .Cells(.Rows.Count, 1).End(xlUp)
    lazH = .Cells(.Rows.Count, 8).End(xlUp)
    'Farbe in Spalte B + J entfernen
    .Range("B5:B" & lazA).Interior.ColorIndex = xlColorIndexNone
    .Range("I5:I" & lazH).Interior.ColorIndex = xlColorIndexNone
    Application.ScreenUpdating = False
    '+C2 in Spalte B + I suchen  (über Exit For)
    For azC2 = 1 To lazA
    If .Cells(azC2, 2) = "+C2" Then Exit For
    Next azC2
    For hzC2 = 1 To lazA
    If .Cells(hzC2, 9) = "+C2" Then Exit For
    Next hzC2
    'Bereich +C2 zuerst auswerten
    ''Stückliste 2: "+C2" auswerten und Zeilen löschen
    For ZeileH = lazH To hzC2 + 1 Step -1
    For ZeileA = lazA To azC2 + 1 Step -1
    If .Cells(ZeileH, 10) = .Cells(ZeileA, 3) Then
    If .Cells(ZeileH, 9) = .Cells(ZeileA, 2) Then
    .Cells(ZeileH, 8).Resize(1, 6).Delete shift:=xlShiftUp
    .Cells(ZeileA, 1).Resize(1, 6).Delete shift:=xlShiftUp
    Else
    .Cells(ZeileH, 10).Interior.ColorIndex = 7  ' Farbe Magenta
    End If
    Exit For
    End If
    Next ZeileA
    'ID-Nr. nicht gefunden Magenta markieren
    If ZeileA 

  • Anzeige
    AW: Excel Stücklisten vergleichen
    17.04.2021 20:38:18
    Piet
    Nachtrag
    zu beachten ist, dass in der Auswertung der Text "+C2" bei StüLi 1+2 in verschiedenen Spalten stehen kann und nach dem Zeilen llöschen "+C2" an verschiedenen Stellen steht. Drahtwiderstand und Phoenx Klemmen sind mir bekannt. Habe im Schaltschrankbau gearbeitet.
    mfg Piet
    AW: Excel Stücklisten vergleichen
    19.04.2021 10:21:35
    Thomas
    Hallo Piet,
    vielen Dank für deine Hilfe. Ich habe deinen Code eingefügt und getestet. Es funktioniert schon deutlich besser als meine Version, allerdings wird auch hier der Artikel "Leuchtmelder LED 24VDC, gelb" in +C1 als Differenz ausgegeben, obwohl nur in +C2 eine Differenz vorhanden ist. Ich habe es auch mal mit anderen Artikeln getestet, sobald sich die Anzahl von Artikeln die in C1 und C2 vorkommen unterscheiden, wird das als Differenz erkannt.
    Ich werde mir das nochmal genauer anschauen. Außerdem suche ich noch nach einer Lösung wenn die Stückliste aus mehr als 2 Schränken bestehet, also z.B. von +C1 bis +C10. Im Prinzip müsste man das so ändern, dass immer nur bis zu einer Zeile die mit "+C" beginnt gesucht wird und dann der nächste Abschnit bis zur nächsten Zeile mit "+C". Dann wäre es egal ob nur 1 oder 20 Schränke in der Stückliste vorhanden sind.

    Anzeige
    AW: Excel Stücklisten vergleichen
    19.04.2021 14:57:19
    Piet
    Hallo Thomas
    genau das habe ich in meinem Code versucht. Deshalb auch auf die normale Suchen/Find Methode verzichtet. Oder man müsste ihren Such-Bereich immer auf einen Schaltschrank begrenzen! Kann sein das er noch nicht optimal laeuft. Aber das Prinzip ist richtig.
    mfg Piet
    AW: Excel Stücklisten vergleichen
    22.04.2021 14:29:08
    Thomas
    Ich habe den Code nochmal genau angeschaut, und zumindest in der Theorie eine Idee wie es für beliebig viele Schränke also von +C1 bis +Cxx funktionieren könnte.
    Zuerst müsste die letzte Zeile bzw. Position ermittelt werden, was über ZeilenzA = .Cells(.Rows.Count, 1).End(xlUp) bereits enthalten ist. Anschließend müsste die Auswertung, die für den Vergleich von +C2 gedacht war in eine Schleife gepackt werden, die Rückwärst also von der letzten Zeile aus bis zur nächsten leeren Zelle in Spalte A bzw. H widerholt wird. Sobald die leere Zelle ermittelt wurde müsste die Auswertung erneut gestartet werden, dann allerdings von der aktuellen Zeile bis zur dann nächsten leeren Zelle in Spalte A bzw. H. Dies müsste so lange wiederholt werden, bis Zeile 5 erreicht wird. Ich habe schon viel Recherchiert, aber leider keine Möglichkeit gefunden das so umzusetzen. Vielleicht hat noch jemand eine Idee wie man sowas lösen könnte. Vielen Dank schon mal :-)
    Anzeige
    AW: Excel Stücklisten vergleichen
    23.04.2021 07:28:29
    Thomas
    Ich habe den Code nochmal genau angeschaut, und zumindest in der Theorie eine Idee wie es für beliebig viele Schränke also von +C1 bis +Cxx funktionieren könnte.
    Zuerst müsste die letzte Zeile bzw. Position ermittelt werden, was über ZeilenzA = .Cells(.Rows.Count, 1).End(xlUp) bereits enthalten ist. Anschließend müsste die Auswertung, die für den Vergleich von +C2 gedacht war in eine Schleife gepackt werden, die Rückwärst also von der letzten Zeile aus bis zur nächsten leeren Zelle in Spalte A bzw. H widerholt wird. Sobald die leere Zelle ermittelt wurde müsste die Auswertung erneut gestartet werden, dann allerdings von der aktuellen Zeile bis zur dann nächsten leeren Zelle in Spalte A bzw. H. Dies müsste so lange wiederholt werden, bis Zeile 5 erreicht wird. Ich habe schon viel Recherchiert, aber leider keine Möglichkeit gefunden das so umzusetzen. Vielleicht hat noch jemand eine Idee wie man sowas lösen könnte. Vielen Dank schon mal :-)
    Anzeige
    ;
    Anzeige
    Anzeige

    Infobox / Tutorial

    Excel Stücklisten vergleichen: Praktische Anleitungen und Lösungen


    Schritt-für-Schritt-Anleitung

    Um eine Excel Stückliste zu vergleichen, kannst du die folgenden Schritte befolgen:

    1. Stücklisten importieren: Stelle sicher, dass du die beiden Stücklisten (Stückliste_1 und Stückliste_2) in deine Excel-Arbeitsmappe importiert hast.

    2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

    3. Modul erstellen: Klicke mit der rechten Maustaste auf deinen Projektordner und wähle Einfügen > Modul.

    4. Code einfügen: Kopiere den folgenden VBA-Code in das Modul:

      Sub Stücklisten_vergleichen()
         ' Werte Neu mit Alt vergleichen
         Dim wks As Worksheet
         Dim lazA As Long, lazH As Long
         Dim azC2 As Long, hzC2 As Long
         Set wks = ThisWorkbook.Worksheets("Auswertung2")
         With wks
             lazA = .Cells(.Rows.Count, 1).End(xlUp)
             lazH = .Cells(.Rows.Count, 8).End(xlUp)
             Application.ScreenUpdating = False
      
             ' Suche nach "+C2"
             For azC2 = 1 To lazA
                 If .Cells(azC2, 2) = "+C2" Then Exit For
             Next azC2
             For hzC2 = 1 To lazH
                 If .Cells(hzC2, 9) = "+C2" Then Exit For
             Next hzC2
      
             ' Vergleiche den Bereich
             For ZeileH = lazH To hzC2 + 1 Step -1
                 For ZeileA = lazA To azC2 + 1 Step -1
                     If .Cells(ZeileH, 10) = .Cells(ZeileA, 3) Then
                         If .Cells(ZeileH, 9) = .Cells(ZeileA, 2) Then
                             .Cells(ZeileH, 8).Resize(1, 6).Delete shift:=xlShiftUp
                             .Cells(ZeileA, 1).Resize(1, 6).Delete shift:=xlShiftUp
                         End If
                         Exit For
                     End If
                 Next ZeileA
             Next ZeileH
         End With
      End Sub
    5. Code anpassen: Je nach Bedarf kannst du den Code anpassen, um mehrere Schaltschrank-Bereiche zu berücksichtigen.

    6. Makro ausführen: Speichere die Änderungen und führe das Makro aus, um die Stücklisten zu vergleichen.


    Häufige Fehler und Lösungen

    • Fehler: Falsche Differenzen angezeigt
      Lösung: Stelle sicher, dass die Suche nach den Kennzeichnungen (z.B. +C1, +C2) korrekt implementiert ist. Überprüfe den Bereich, der für den Vergleich genutzt wird.

    • Fehler: Kein Ergebnis
      Lösung: Überprüfe, ob die Stücklisten korrekt importiert wurden und die richtigen Spalten für den Vergleich verwendet werden.


    Alternative Methoden

    Wenn du keine VBA-Programmierung verwenden möchtest, kannst du auch die Bedingte Formatierung in Excel nutzen, um Unterschiede zwischen zwei Stücklisten hervorzuheben. Dazu kannst du die folgenden Schritte ausführen:

    1. Wähle die Zellen in der ersten Stückliste aus.

    2. Gehe zu Bedingte Formatierung > Neue Regel.

    3. Wähle Formel zur Ermittlung der zu formatierenden Zellen verwenden.

    4. Gib eine Formel ein, die die Zellen der zweiten Stückliste vergleicht, z.B.:

      =A1<>B1
    5. Wähle ein Format aus, um die Unterschiede hervorzuheben.


    Praktische Beispiele

    • Stückliste erstellen in Excel: Beginne mit einer neuen Tabelle und erstelle zwei Spalten für die Artikelnummer und die Menge. Füge die Daten der beiden Stücklisten ein und benutze die oben genannten Methoden zum Vergleichen.

    • Vergleichsbericht: Du könntest auch eine separate Auswertungsseite in Excel erstellen, die die Unterschiede zwischen den Stücklisten auflistet, indem du die Ergebnisse des VBA-Codes nutzt.


    Tipps für Profis

    • Optimierung des VBA-Codes: Achte darauf, die Schleifen so zu strukturieren, dass sie nur die benötigten Bereiche durchsuchen. Das verbessert die Performance, besonders bei großen Stücklisten.

    • Verwendung von Named Ranges: Verwende benannte Bereiche, um deine Formeln und den VBA-Code leserlicher und wartungsfreundlicher zu machen.

    • Regelmäßige Backups: Mache regelmäßig Backups deiner Excel-Dateien, besonders wenn du mit VBA arbeitest.


    FAQ: Häufige Fragen

    1. Wie kann ich mehrere Stücklisten gleichzeitig vergleichen?
    Du kannst den VBA-Code anpassen, sodass er in einer Schleife alle gewünschten Stücklisten durchläuft und diese miteinander vergleicht.

    2. Funktioniert das auch in Excel Online?
    Die VBA-Funktionalität ist in Excel Online nicht verfügbar. Du musst die Desktop-Version von Excel verwenden, um die VBA-Makros auszuführen.

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Entdecke mehr
    Finde genau, was du suchst

    Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

    Suche nach den besten Antworten
    Unsere beliebtesten Threads

    Entdecke unsere meistgeklickten Beiträge in der Google Suche

    Top 100 Threads jetzt ansehen
    Anzeige