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

Berechnung von Stückzahlen eines Artikelbaums

Berechnung von Stückzahlen eines Artikelbaums
06.11.2019 11:01:54
Stückzahlen
Hallo zusammen,
ich hoffe die Überschrift trifft es einigermaßen, erkläre es aber einfach hier ausführlich. Ich versuche verzweifelt eine Anzahl von Produkten herauszufinden, die in gewissen Untergruppen vorkommen. Ich hoffe ihr könnt mir weiterhelfen
Folgende Ausgangslage beispielhaft dargestellt.
Ich habe z.B. vier Spalten
Spalte A = Level
Spalte B = Stückzahl
Spalte C = Beschreibung
Spalte D = Gesamtstückzahl
Annahme ich will ein Haus bauen
Level Stückzahl Beschreibung Gesamtstückzahl
1 1 Haus
2 1 Erdgeschoss
3 1 Türen
3 3 Wohnbereiche
4 3 Fenster
4 1 Türen
3 1 Schlafbereiche
4 2 Fenster
4 1 Türen
2 1 Obergeschoß
3 2 Schlafbereiche
4 2 Fenster
4 1 Türen
3 2 Badezimmer
4 2 Fenster
4 1 Türen
Nun möchte ich immer in der Spalte D des letzten Knotenpunktes die benötigte Gesamtanzahl berechnen.
Also als Beispiel
- die Gesamtzahl der Türen im Schlafbereich im Erdgeschoß = 1Tür x 1Schlafbereich x 1Erdgeschoß = 1 in Spalte D
- die Gesamtzahl der Fenster in den Badezimmern im Obergeschoss = 2Fenster x 2Badezimmer x 1Obergeschoss = 4 in Spalte D
Es gibt aber nicht immer die gleiche Anzahl an Knotenpunkten, sondern der unterste Punkt kann auch mal im Level 3 aufhören --> Als Beispiel die Eingangstür des EG
Ich hoffe ich habe es soweit verständlich erklärt.
Hier mal mein Ansatz, wo ich aber dann nicht mehr weiterkomme

'letzte Zeile in Spalte A suchen:
Zeilenanzahl = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
' Zeilen nacheinander überprüfen, ob es sich um einen untersten Knotenpunkt handelt
For z = 1 To Zeilenanzahl
If Cells(z, 1) >= Cells(z + 1, 1) Then
' Wenn ich einen untersten Knotenpunkt habe, dann die Einzelstückzahl aus Spalte B in   _
_
Variable speichern
a = Cells(z, 2).Value
' herausfinden in welchem Knoten dieser speziellen Artikel endet
Level = Cells(z, 1).Value
' nachdem ich ja die Stückzahl des untersten Levels schon habe will ich jetzt die Stü _
ckzahl des direkt darüber liegenden Knotens ermitteln aber hier komme ich nicht weiter...
Level_1 = Cells(z, 1).End(xlUp).Row

Ich will ihm sagen, er soll ab der Zeile in der er gerade ist nach oben das nächst kleinere Level suchen und mir hier die Reihe nennen, dass ich dann wieder die Stückzahl aus der gefundenen Reihe als Variable b zu speichern, dass ich dann am Ende in Spalte D den Wert a * b * c * ... (je nach Anzahl der Level) ausgeben kann.
Wichtig ist auch, dass er mir eben nur den ersten kleineren Wert berücksichtigt, und dann mit dem nächsten, also Level - 2 weitermacht...
Vielen Dank euch schon mal für eure Unterstützung!!!

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: die "Struktur" sollte mE geändert werden ...
06.11.2019 12:58:46
neopa
Hallo Stephan,
... für Dein Beispiel wäre mE demzufolge z.B. zu folgender:
Arbeitsblatt mit dem Namen 'Tabelle2'
 DEF
1NrStckBeschreibung
21.1Haus
31.11EG
41.1.13Wohnbereiche
51.1.1.11Tür
61.1.1.23Fenster
71.1.21Schlafbereich
8...  
91.24OG
Verwendete Systemkomponenten: [Windows (32-bit) NT 6.02] MS Excel 2010
Diese Tabelle wurde mit Tab2Html (v2.6.0) erstellt. ©Gerd alias Bamberg

Gruß Werner
.. , - ...
...
dann wäre auch eine Auswertung kein Problem.
Gruß Werner
.. , - ...
Anzeige
Die Antwort ist 42, wie lautet die Frage ...
06.11.2019 13:19:14
mmat
Hallo,
wie neopa c schreibt, die Struktur sollte wie gezeigt ergänzt werden. Dadurch erhält jeder Knoten und jedes Blatt eine Referenz auf den übergeordneten Knoten, was jegliche Auswertung erleichtert.
Nur hab ich noch nicht so ganz kapiert, was du da auswerten willst. Was konkret soll da berechnet werden?
vg, MM
AW: vielleicht eine Idee ...
06.11.2019 13:34:08
neopa
Hallo Stephan,
... meinst Du es wie folgt? In D2: =WENNFEHLER(VERWEIS(9;1/(A$1:A1&ltA2);B:B)*B2;B2)
und Formel nach unten kopieren.
Gruß Werner
.. , - ...
AW: vielleicht eine Idee ...
06.11.2019 15:06:31
Stephan
Hallo zusammen, erstmal vielen Dank für eure Unterstützung.
Leider funktioniert die Formel nicht wie ich sie brauche.
Ich habe jetzt mal eine Datei erstellt in der das hoffentlich klarer ersichtlich ist was ich als Ergebnis brauche
https://www.herber.de/bbs/user/132975.xlsx
Jedes x in Spalte "M" zeigt an, dass diese Zeile ein unterster Knoten ist. So soll in diesen Zeilen in Spalte "N" die benötigte Anzahl Kaufteil/Baugruppe stehen / diese errechnet sich, wenn man den Baum nach oben geht.
Also Beispiel für Zeile 21 / Leistung in Level 8 brauche ich 1x, habe aber in Level 7 in Summe 6 Baugruppen / In Level 5 dann wieder 1 Baugruppe und so weiter.
Das Produkt daraus ergibt dann die Anzahl, wie oft ich diese Leistung brauche. Jetzt Filter ich nach Leistung und habe nur noch Zeilen mit "Leistung" in denen in Spalte "N" die benötigte Anzahl steht.
Hoffe das ist jetzt klarer geworden.
Komme ich irgendwie von meiner Formatierung auf eure mit 1.1.2.x ich habe hier leider ca. 60.000 Zeilen
Anzeige
AW: mE noch immer nicht eindeutig ...
06.11.2019 15:26:45
neopa
Hallo Stephan,
... schreib doch mal die von Dir händisch ermittelten Ergebniswerte in Spalte N Deines neuen Beispiels ein. Vielleicht wird wird es dann auch für mich verständlicher.
Gruß Werner
.. , - ...
Aggregation?
06.11.2019 15:46:00
mmat
Hallo,
ich kapiers auch nicht.
Unter dem Knoten in Zeile 20 (der 6 Mal vorhanden ist) sind 4 unterschiedliche Blätter. Was soll denn da für Zeile 20 rauskommen? 6*4=24? (NICHT 42! :-) )
vg, MM
AW: Aggregation?
07.11.2019 07:56:55
Stephan
Hallo zusammen,
ich überlege schon die ganze Zeit, wie ich es einfacher erklären kann...
Ich habe jetzt mal die Liste etwas einfacher gemacht, und mal Beispiele rein geschrieben die realistisch sein könnten.
https://www.herber.de/bbs/user/132990.xlsx
Hier will ich dann eben wissen, wie viele z.B. Tomatenscheiben oder Zwiebeln ich benötige, egal in welchem Level diese stehen. Sie sind ja immer der unterste Knoten des Bereichs.
https://www.herber.de/bbs/user/132991.xlsx
Alle anderen Zeilen interessieren mich als Ergebnis nicht, wäre aber auch nicht schlimm, wenn da was drinstehen würde.
Ich hoffe jetzt ist es klarer. :-)
Anzeige
AW: Aggregation?
07.11.2019 08:06:04
Stephan
Ich habe aber gar nicht auf deine Fragen geantwortet...
Unter N in Zeile 20 soll gar nichts stehen. Das ist ja nicht der unterste Punkt des Baumes...
Ich brauche hier in N nur die Werte in 21-24.
Für N21 wäre die Formel dann (Ergebnis N21 = 6)
N21 = O21 * O20 * O13 * O12 * O11 * O10 * O3 * O2 (8 Werte, da ich in Level 8 bin)
Als Beispiel noch für N40 (Ergebnis N40 = 77)
N40 = O40 * O39 * O38 * O37 * O3 * O2 (6 Werte, da ich in Level 6 bin)
Viele Grüße Stephan
AW: nun eindeutig, aber stelle thread offen ...
07.11.2019 11:27:20
neopa
Hallo Stephan,
... weil ich keinen vernünftiger Formellösungsansatz gefunden habe, der noch dazu über viele tausende Datenzeile funktionieren soll. Hier wird dann wohl nur eine VBA-Lösung in Frage kommen. Das ist dann aber was für die VBA'ler
Gruß Werner
.. , - ...
Anzeige
AW: nun eindeutig, aber stelle thread offen ...
07.11.2019 12:55:16
Stephan
Alles klar, trotzdem Danke für deine Mühe!
AW: hiermit thread wieder offen gestellt owT
07.11.2019 19:25:18
neopa
Gruß Werner
.. , - ...
Keine Aggregation !
08.11.2019 11:30:00
mmat
Hallo,
ich formuliere das mal so, wie ich das verstanden habe:
Du möchtest für jedes Blatt (unterste Ebene) wissen, wie oft es benötigt wird. Dazu ist die Anzahl auf der untersten Ebene mit der Anzahl der übergeordneten Knoten zu multiplizieren.
Isses das?
Ich denke das krieg ich hin (VBA), aber heute wahrscheinlich nicht mehr ...
vg, MM
AW: Keine Aggregation !
08.11.2019 11:33:02
Stephan
Hallo mmat,
ja genau das ist es was ich suche.
Danke dir schon mal!
fertig!
08.11.2019 15:06:12
mmat
Sorry, kann nix uploaden.
Die folgende Lösung basiert auf dem Muster mit den Bauteil/Baugruppen
Option Explicit
Dim r As Long
Sub start()
Dim mul As Long, levl As Long
r = 2: [N2:N55].ClearContents
mul = Cells(r, "O")
levl = Cells(r, 1)
If Cells(r + 1, 1)  levl + 1 Then MsgBox "Hier ist was faul", vbOKOnly: End
schleife mul
End Sub
Sub schleife(ByVal mul As Long)
Dim levl As Long
r = r + 1: levl = Cells(r, 1)
While Cells(r + 1, 1) > levl
schleife mul * Cells(r, "O")  'ein Unterknoten
Wend
While Cells(r - 1, 1) 

Anzeige
AW: fertig!
11.11.2019 07:33:48
Stephan
Super gut!!!
Vielen vielen Dank! Es klappt hervorragend und erspart mir 60.000 Zeilen manuell zu befüllen!
Danke für den super schnellen Suport!
Gruß Stephan
AW: fertig!
11.11.2019 07:57:49
Stephan
Hallo mmat,
jetzt habe ich leider doch noch was gefunden... :-(
Ich habe die Spalten meiner Originalliste angepasst -->
Spalte N wurde P
Spalte O wurde Q
Dann habe ich noch die Zeilenanzahl mal auf 10000 gesetzt (ich habe mal 2000 und mal 8500 Zeilen), da ich nicht weiß, wie ich anstatt der 5000 die Variable "Zeilenanzahl" da rein schreibe.
Jetzt ist das Problem, dass der immer irgendwo aufhört mit dem Excel und auch immer irgendwo anders --> das eine Tab mit 5400 Zeilen hört in Zeile 832 auf, das andere Tab mit 2212 Zeilen bei 417...
  • 
    Sub Gesamtanzahl()
    Dim mul As Long, levl As Long
    r = 2: [P2:P10000].ClearContents
    mul = Cells(r, "Q")
    levl = Cells(r, 1)
    If Cells(r + 1, 1)  levl + 1 Then MsgBox "Hier ist was faul", vbOKOnly: End
    schleife mul
    End Sub
    

    Sub schleife(ByVal mul As Long)
    Dim levl As Long
    r = r + 1: levl = Cells(r, 1)
    While Cells(r + 1, 1) > levl
    schleife mul * Cells(r, "Q")  'ein Unterknoten
    Wend
    While Cells(r - 1, 1) 

  • Hier noch mein Ansatz mit variabler Zeilenanzahl...
  • 
    Sub Gesamtanzahl()
    Dim mul As Long, levl As Long, Zeilenanzahl As Long
    'letzte Zeile in Spalte A suchen:
    Zeilenanzahl = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
    r = 2: [P2:P&Zeilenanzahl].ClearContents
    mul = Cells(r, "Q")
    levl = Cells(r, 1)
    If Cells(r + 1, 1)  levl + 1 Then MsgBox "Hier ist was faul", vbOKOnly: End
    schleife mul
    End Sub
    

    Sub schleife(ByVal mul As Long)
    Dim levl As Long
    r = r + 1: levl = Cells(r, 1)
    While Cells(r + 1, 1) > levl
    schleife mul * Cells(r, "Q")  'ein Unterknoten
    Wend
    While Cells(r - 1, 1) 


  • Danke fürs nochmal drüberschauen! :-)
    Viel Grüße
    Stephan
    Anzeige
    AW: fertig!
    11.11.2019 08:22:16
    Stephan
    Hallo mmat,
    und leider habe ich in einem Original-Tab auch einige Fehler gefunden. Ich habe dir jetzt mal einen Tab der Originalliste angefügt und mal die falschen gelb markiert. Zusätzlich siehst du hier, wo das ausfüllen automatisch stoppt (und nicht bis zum Ende geht).
    https://www.herber.de/bbs/user/133083.xlsm
    

    Ich bin dir sehr Dankbar! :-)
    Viele Grüße Stephan
    AW: fertig!
    11.11.2019 10:54:28
    mmat
    Hallo,
    irgendwie kann ich die Datei nicht Downloaden, krieg 'nen 404.
    Das geht glaubich so nicht (Die Kurzform kann scheinbar nur als Literal notiert werden):
    [P2:P&Zeilenanzahl].ClearContents
    Korrekt wäre
    range(cells(2,15), cells(Zeilenzahl, "P")).clearcontents
    
    War das das Problem (wie gesagt: komme an die Datei nicht dran)?
    vg, MM
    Anzeige
    AW: fertig!
    11.11.2019 11:15:09
    Stephan
    Hallo MM,
    geht leider nicht... Laufzeitfehler 1004
    Du kannst den Link mit meiner Datei einfach kopieren und dann im Explorer einfügen, dann läd er die Liste runter. habe wohl den Link falsch eingefügt...
    Danke dir!
    Gruß
    Stephan
    Das Ganze nochmal von vorne :-)
    11.11.2019 15:35:22
    vorne
    Folgendes läuft mit deiner aktuellen Datei bis Zeile 1032 durch. Dann passiert was, womit ich garnicht gerechnet habe, es kommt nochmal ein Level 8 nach Level 9 und vor Level 2. Diese Struktur ist nicht vorgesehen :-). Wenn man die Zeile löscht, läuft das Ding komplett durch
    Was ist das denn, Blatt oder Knoten ? (ich sehe aus verständlichen Gründen keinen Text)
    Jedenfalls sollen auf einer Ebene erst alle Blätter und dann die Unterknoten kommen.
    Option Explicit
    Dim r As Long
    Sub start()
    Dim mul As Long, levl As Long, Zeilenzahl As Long
    Zeilenzahl = Cells(Rows.Count, 1).End(xlUp).Row
    r = 2: Range(Cells(2, 15), Cells(Zeilenzahl, "P")).ClearContents
    mul = Cells(r, "Q")
    levl = Cells(r, 1)
    If Cells(r + 1, 1)  levl + 1 Then MsgBox "Hier ist was faul", vbOKOnly: End
    schleife mul
    MsgBox CStr(r) + " von" + Str(Zeilenzahl) + " Zeilen"
    End Sub
    Sub schleife(ByVal mul As Long)
    Dim levl As Long
    r = r + 1: levl = Cells(r, 1)
    If r = 416 Then Stop
    While Cells(r + 1, 1) > levl
    schleife mul * Cells(r, "Q")  'ein Unterknoten
    Wend
    While Cells(r - 1, 1) 
    Vg, MM
    Anzeige
    AW: Das Ganze nochmal von vorne :-)
    11.11.2019 22:49:37
    vorne
    HAllo MM,
    vielen Dank, jetzt sind wir der finalen Lösung schon sehr nah...
    Ich tue mich aktuell mit der Aussage "Blatt" oder "Knoten" schwer, aber wenn ich das richtig aus dem Programm lese ist ein Knoten bei dir (eigentlich auch logisch) ein Zwischenpunkt der "Kette" und das "Blatt" das Ende der Kette.
    Also es gibt eigentlich keine fixe aussage, wann wie und wo die Kette sich "verbindet und wo dann ein Ende ist. Es gibt in meinen Tabellen in Summe 10 Level, die wild durcheinander angeordnet werden können.
    Im expliziten Beispiel sind die 9 in Zeile 1031 und die 8 in Zeile 1032 ein jeweiliges Ende der Kette ("Blatt"). Die darauffolgende 2 dann wieder ein "Knoten".
    AUch in Zeile 193 bis 199 habe ich einen Fehler entdeckt. In 193 nimmt er kein Ende der Kette an ("Blatt") was es aber ist. Dadurch zieht sich die Einzel-Anzahl 0 auf die darauffolgenden Zeilen...
    Wenn ich etwas wirr geschrieben habe, tut es mir leid. Frag gerne einfach nach!
    Danke für deine Gedult! :-)
    VG
    Stephan
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige