Live-Forum - Die aktuellen Beiträge
Datum
Titel
19.04.2024 12:23:24
19.04.2024 11:45:34
Anzeige
Archiv - Navigation
1824to1828
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

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:

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

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige
    Archiv - Verwandte Themen
    Forumthread
    Beiträge