Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1212to1216
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

Stücklistenauflösung

Stücklistenauflösung
Jürgen
Hallo,
zerbreche mir schon eine ganze Weile den Kopf über folgendes Problem, hoff über euch Hilfe zu bekommen:
Habe eine Datenbasis bestehend aus Produkten, Baugruppen, Bauteilen und Komponenten. Zur Aufschlüsselung, welches Produkt aus wieviele und welchen Baugruppen, Bauteilen und Komponenten besteht muss eine Materialstückliste generiert werden.
Wie könnte dies auch bei abweichender Benennung der Produkte usw. realisieren?
Vielen Dank im Vorraus fürs Kopfzerbrechen.
Grüße
Jürgen
https://www.herber.de/bbs/user/74724.zip

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

Betreff
Benutzer
Anzeige
Logik unklar
08.05.2011 18:18:44
Erich
Hi Jürgen,
hier eine Wiedergabe deiner Tabelle - dann brauchen alle anderen das ZIP nicht herunterzuladwn und zu entpacken:
 ABCDEF
1Basisidaten     
2Stufe 0 Stufe 1Stufe 2Stufe 3Stufe 4
3ProduktPositionBaugruppeBauteilKomponente 1Komponente 2
4Produkt A10Baugruppe ABauteil A  
5Produkt A10Baugruppe ABauteil A  
6Produkt A10Baugruppe ABauteil B  
7Produkt A10Baugruppe ABauteil CKomponente 1A 
8Produkt A10Baugruppe ABauteil CKomponente 1B 
9Produkt A20Baugruppe BBauteil D  
10Produkt A20Baugruppe BBauteil E  
11Produkt A20Baugruppe BBauteil F  
12Produkt A30Baugruppe CBauteil F  
13Produkt A40Baugruppe D   
14Produkt B10Baugruppe ABauteil AKomponente 1AKomponente 2A
15Produkt B10Baugruppe ABauteil AKomponente 1BKomponente 2B
16Produkt B10Baugruppe ABauteil BKomponente 1C 
17Produkt B10Baugruppe ABauteil BKomponente 1D 
18Produkt B20Baugruppe BBauteil CKomponente 1EKomponente 2C
19Produkt B20Baugruppe BBauteil CKomponente 1FKomponente 2D
20Produkt B20Baugruppe BBauteil DKomponente 1G 
21Produkt B20Baugruppe BBauteil DKomponente 1H 
22Produkt B50Baugruppe C   
23Produkt B60Baugruppe D   
24Produkt B70Baugruppe E   
25Produkt B80Baugruppe F   
26Produkt B90Baugruppe G   
27      
28Materialstückliste     
29PositionStufeMaterialMenge  
30 0Produkt A1  
31101Baugruppe A2  
32 2Bauteil A2  
33 2Bauteil B1  
34 2Bauteil C1  
35 3Komponente 1A1  
36 3Komponente 1B1  
37201Baugruppe B1  
38 2Bauteil D1  
39 2Bauteil E1  
40 2Bauteil F1  
41301Baugruppe C1  
42 2Bauteil F1  
43401Baugruppe D1  
44 0Produkt B1  
45101Baugruppe A1  
46 2Bauteil A1  
47 3Komponente 1A1  
48 4Komponente 2A1  
49 3Komponente 1B1  
50 4Komponente 2B1  
51 2Bauteil B1  
52 3Komponente 1C1  
53 3Komponente 1D1  
54201Baugruppe B1  
55 2Bauteil C1  
56 3Komponente 1E1  
57 4Komponente 2A1  
58 3Komponente 1F1  
59 4Komponente 2D1  
60 2Bauteil D1  
61 3Komponente 1G1  
62 3Komponente 1H1  
63501Baugruppe C1  
64601Baugruppe D1  
65701Baugruppe E1  
66801Baugruppe F1  
67901Baugruppe G1  

Und dann meine Frage:
Woraus ergäbe sich die Menge 2 der Baugruppe A des Produkts A?
Es kann sein, dass Produkt A aus 2 Baugruppen A mit je einem Bauteil A besteht. Dann wäre die 2 richtig.
Es kann aber auch sein, dass Produkt A nur 1 Baugruppe A enthält, und BaugruppeA 2 BauteileA enthält.
Dann wäre die 2 hinter Bauteil A richtig., hinter Baugruppe A müsste aber wohl eine 1 stehen.
Das Ganze ist damit m. E. nicht eindeutig.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Logik unklar
08.05.2011 18:39:53
Jürgen
Hallo Erich,
die 2 hinter Baugruppe A ist falsch, das muss eine 1 sein. Also Baugruppe A besteht aus 2 Bauteilen A.
Grüße nach Kamp-Lintfort.
Zweifel - Logik noch unklar
08.05.2011 18:50:11
Erich
Hi Jürgen,
woher kommt deine Info?
Sieht die Basisdaten-Tab. nicht genauso aus, wenn Produkt A aus 2 Baugruppen A mit je einem Bauteil A besteht?
Oder stünde dann etwas Anderes in den Basisdaten?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Logik unklar
08.05.2011 18:51:14
Jürgen
Hallo Erich,
die 2 hinter Baugruppe A ist falsch, das muss eine 1 sein. Also Baugruppe A besteht aus 2 Bauteilen A.
Grüße nach Kamp-Lintfort.
AW: Logik unklar
08.05.2011 19:15:21
Jürgen
Dafür habe ich die Positionsnummer eingeführt, falls das Produkt A aus 2 Baugruppen A mit je einem Bauteil A besteht.
10 Baugruppe A Bauteil A
20 Baugruppe A Bateil A
Anzeige
und immer noch
08.05.2011 21:03:08
Erich
Hi Jürgen,
die Positionsnummer reicht vermutlich nicht aus. Wie wären die Zeilen 16:17 der Basisdaten zu interpretieren,
wenn in E17 auch Komponente 1C stünde, also:
Produkt B 10 Baugruppe A Bauteil B Komponente 1C
Produkt B 10 Baugruppe A Bauteil B Komponente 1C
Dann gibt es wg. Position 10 nur 1 Baugruppe A.
Und klar ist, dass es zwei Komponenten 1C gibt.
Aber gibt es jetzt ein oder zwei Bauteile B?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: und immer noch
08.05.2011 22:58:31
Jürgen
Hallo Erich,
wenn in E17 die Komponente 1C wäre, also
Produkt B 10 Baugruppe A Bauteil B Komponente 1C
Komponente 1C
gäbe es für 1 Produkt B, 1 Baugruppe A, 1 Bauteil B und 2 Komponeten C.
Vielleicht ist es so übersichtlicher:
https://www.herber.de/bbs/user/74729.zip
Vielen Dank und Grüße
Jürgen
Anzeige
jetzt könnte es sein...
09.05.2011 09:45:13
Erich
Hi Jüergen,
dass die Geschichte mit der neuesten Regeländerung eindeutig, entscheidbar geworden ist.
(Es ging und geht nicht um "übersichtlicher"!)
Jetzt kommt jedes Teil so oft vor, wie es in den Basisdaten steht.
Die Position spielt keine Rolle mehr und könnte entfallen.
Wenn ich nun noch in den Basisdaten, Zelle D8 den Text "Bauteil C" lösche, generiert mir dieses Makro
genau das, was du für die Liste vorgegeben hast:

Option Explicit
Sub StueckList()
Dim lngQ As Long, arrQ, arrZ(), qq As Long, cc As Long, zz As Long
lngQ = Cells(Rows.Count, 2).End(xlUp).Row - 3
arrQ = Cells(4, 1).Resize(lngQ, 6)
ReDim arrZ(1 To 4, 1 To lngQ * UBound(arrQ, 2))
For qq = 1 To lngQ
For cc = 1 To 6
If cc  2 And arrQ(qq, cc)  "" Then
zz = zz + 1
If cc = 3 Then arrZ(1, zz) = arrQ(qq, 2)
arrZ(2, zz) = Application.Max(0, cc - 2)
arrZ(3, zz) = arrQ(qq, cc)
arrZ(4, zz) = 1
If zz > 1 Then
If arrZ(2, zz) = arrZ(2, zz - 1) And _
arrZ(3, zz) = arrZ(3, zz - 1) Then
zz = zz - 1
arrZ(4, zz) = arrZ(4, zz) + 1
End If
End If
End If
Next cc
Next qq
'  Cells(3, 8).Resize(, 4) = Split("Position Stufe Material Menge")
ReDim Preserve arrZ(1 To 4, 1 To zz)
Cells(4, 8).Resize(zz, 4) = Application.Transpose(arrZ)
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: jetzt könnte es sein...
09.05.2011 13:06:21
Jürgen
Hallo Erich,
das ist sensationell. Meine Daten liegen in großer Menge wie im ersten Beispiel vor, deswegen überlege ich Makro welches vorher die Produkte, Baugruppen, Bauteile aus der Liste löscht die nicht benötigt werden. Also beispielsweise wenn in der folgenden rechten Spalte nichts mehr steht wie in D4:D5 dann nicht löschen, aber C5 löschen weil C4 identisch ist.
Grüße
Jürgen
Danke für Rückmeldung Warum offen? Nun zu. (owT)
09.05.2011 13:34:49
Erich
AW: Danke für Rückmeldung Warum offen? Nun zu. (owT)
09.05.2011 16:22:19
Jürgen
Hallo Erich,
noch eine Frage. Lassen sich die Daten auch in der Darstellung wiedergeben?
https://www.herber.de/bbs/user/74742.zip
1000 Dank und Grüße
Jürgen
Anzeige
Den Betreff kann man auch ändern...
09.05.2011 16:49:38
Erich
Hi Jürgen,
ja, sie lassen!

Sub StueckList2()
Dim lngQ As Long, arrQ, arrZ(), qq As Long, cc As Long, zz As Long
lngQ = Cells(Rows.Count, 2).End(xlUp).Row - 3
arrQ = Cells(4, 1).Resize(lngQ, 6)
ReDim arrZ(1 To 5, 1 To lngQ * UBound(arrQ, 2))
For qq = 1 To lngQ
If qq = 1 Then
arrZ(1, 1) = arrQ(1, 1)
ElseIf arrQ(qq, 1)  arrQ(qq - 1, 1) Then
arrZ(1, zz + 1) = arrQ(qq, 1)
End If
For cc = 3 To 6
If arrQ(qq, cc)  "" Then
zz = zz + 1
arrZ(2, zz) = arrQ(qq, 2)
arrZ(3, zz) = Application.Max(0, cc - 2)
arrZ(4, zz) = arrQ(qq, cc)
arrZ(5, zz) = 1
If zz > 1 Then
If arrZ(3, zz) = arrZ(3, zz - 1) And _
arrZ(4, zz) = arrZ(4, zz - 1) Then
zz = zz - 1
arrZ(5, zz) = arrZ(5, zz) + 1
End If
End If
End If
Next cc
Next qq
ReDim Preserve arrZ(1 To 5, 1 To zz)
Cells(4, 8).Resize(zz, 5) = Application.Transpose(arrZ)
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
P.S.:
"owT" bedeutet: "ohne weiteren Text". Steht das im Betreff,
braucht man den Beitrag gar nicht anzusehen - er ist ja wohl leer.
Anzeige
AW: Den Betreff kann man auch ändern...
09.05.2011 18:53:51
Jürgen
Hallo Erich,
der Code funktioniert klasse. Hab versucht ihn zu verstehen, komm aber nicht drauf was ich am Code ändern muss, wenn ich noch eine 5, 6 und 7 Ebene hätte, in dem Materialien stehen?
Das wär dann auch die letzte dumme Frage von mir,
schönen Abend und nochmal vielen Dank,
grüße
Jürgen
drei weitere Spalten
09.05.2011 19:22:41
Erich
Hi Jürgen,
in StueckList2 brauchst du wohl (ungetestet!) nur zwei Zeichen zu ändern,
und zwar die 6 jeweils durch eine 9 zu ersetzen in den Zeilen
arrQ = Cells(4, 1).Resize(lngQ, 6)
For cc = 3 To 6
Damit wird der Quellbereich auf 9 Spalten erweitert, die dann auch abgearbeitet werden.
Die Struktur der Zieltabelle ändert sich dabei nicht, sie kann nur nach unten länger werden.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
P.S.: So ein Betreff sollte etwas kurz aussagen zum Inhalt des Beittrags...
P.P.S.:
Hast du dir eigentlch meine Bedenken wg. Position/Eindeutigkeit/Entscheidbarkeit noch mal durch den Kopf gehen lassen?
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige