Excel Stückliste erstellen

Nudelh0lz

Cadet 4th Year
Registriert
März 2014
Beiträge
120
[GELÖST] Excel Stückliste erstellen

Hallo zusammen,

für ein CAD-Teil möchte ich eine Stückliste in EXCEL zusammentragen. Dieses Modell ist in mehrere Baugruppen unterteilt, in welche sich die einzelnen Teile, die in der Stückliste gezählt werden sollen, befinden.
Nun möchte ich das nicht von Hand eintragen, da es eine etwas größere Liste ist (mehrere 100 Teile) und sich diese noch verändern kann bzw. wird.

Was ich genau machen möchte ist hoffentlich in dem Bild verständlich.
EXCEL1.JPG
excel1-jpg.653790

Der linke Teil ist einfach aus dem Modellbaum abgeschrieben und kann noch erweitert werden.
Der rechte, gelbe Teil soll nun erstellt werden (dieser ist im Bild händisch erstellt worden).

Zum einen muss also jeder Name der Teile genau ein Mal in der einen Spalte auftreten, und zum anderen muss in der rechten Spalte die Anzahl des Teiles im gesamten Modell eingetragen werden. Z.B. ist Teil 1 in UGruppe 1, 2 und 3 enthalten, also 1+2+1=4 mal, Teil 2 in UGruppe 1 und 3, also 1+1=2).

Für den linken Teil der gelben Tabelle habe ich mir gedacht, dass ich etwas benutze wie
Code:
=WENN($G$4:$G4<>"C4";C4)
zu benutzen, geht aber nicht, kann mir auch denken warum -.-'
(Zum Gedankengang: Wenn in der rechten gelben Spalte dieses Teil noch nicht drin ist, dann schreib es an diese Stelle; Spalte G erweitert sich mit jeder Zeile mit, deswegen kein $4 beim hinteren Bereich.)
Jedenfalls wüsste ich jetzt nicht wie ich das anders hinbekomme :(

Zum anderen weiß ich jetzt auch nicht, dass wenn ich diese einzigartige Auflistung habe, die Anzahlen ausgeben kann.

In der Standart-Programmierung würde ich einfach eine oder zwei For-Schleife und einen Zähler oder Abfrage laufen lassen, aber wie ich das in Excel mache ist mir nicht sonderlich klar...
Ich hoffe mir kann jemand von euch helfen.

Die alten Schul-Befehle wie ZÄHLENWENN; ANZAHL; SVERWEIS sind mir noch ein Begriff, aber ich wüsste nicht wie ich diese hierfür anwenden kann...

Grüße!
 
Zuletzt bearbeitet:
Hat dein CAD Programm keine automatische Stücklistenfunktion?
 
@Snooty
Ok ich werde morgen mal danach in dem Zusammenhang schauen.

@Steini1990
Guter Einwand :D Doch das müsste es haben, wonach ich morgen auch mal schauen werde. Aber jetzt interessiert es mich doch, wie die Excellösung aussehen würde.


Würde es mit VBA gehen? Ich habe damit eig. nie was gemacht, nur mal 1-2 leichte Tutorials angeschaut, sowas wie eine Funktion für eine Kreiflächenberechnung ... aber eben nie direkt bezogen auf eine Tabelle.
Also ich weiß, dass man da ganz einfach programmieren kann, eben Schleifen etc. aber wie kann man es z.b. sagen
Code:
Wert A = C4

For x=4 Cx:C1000
 wenn Cx == Wert a, dann ...
 ...
Also die Frage ist, was ich eben noch nie gemacht habe, wie könnte ich dem Wert (String) im Code einen Wert aus einer Tabelle (C4) geben und wie könnte ich die Suche über einen Tabellenbereich (C4:C1000) laufen lassen?

Lg
 
Wieso selbst etwas mit VBA programmieren, wenn Excel die Lösung schon eingebaut hat ;)


Aber als Hilfestelltung:

- Mit einer Schleife die Spalte C durchlaufen
- Wenn ein Wert in einer Zelle vorhanden ist, die erste Spalte deiner gelben Tabelle durchlaufen und gucken, ob der gleiche Werte schon vorhanden ist.
- Falls ja, dann musst du den Wert aus Spalte D zum Wert in der zweiten gelben Spalte hinzufügen
- Falls nein, den Wert am Ende der ersten gelben Spalte hinzufügen und die zugehörige Anzahl in die zweite Spalte
 
Eigentlich ist all das »Thema Datenbank«; eine Tabellenkalkulation rechnet, sie zählt nicht (auf).

ZÄHLENWENN sollte bei nur 5 Teilen reichen.
→ Zählen (Vergleichen) kann ich nur was sich kenne (respektive: wonach ich ›suchen‹ will) und damit Formeln bestücken. Das ist aber statisch. (Danke @WT1995 für das Beispiel.)

Eine dynamische Aufstellung (unbekannte, sich ändernde Zahl von Teilen) kann man mit VBA programmieren, doch wäre das die Wiederfindung des Rades Datenbank.

CN8
 
Vlt hilft dir das weiter:

=ZÄHLENWENN(C:C;"Teil 1") kann auch statt C:C z.B. C1:C99 schreiben, dann zählt er nur wenn von C1 bis C99 Teil 1 vorkommt.
 
Ich habe das Problem jetzt mit Englischer Suche nach Excel Sachen und VBA-Eigenbau gelöst, mit irgendwelchen Verzeichnis Tutorials auf YouTube.

Hier die Lösung für Interessenten, am Beispiel des Bildes:
excel1-jpg.653790


Aufgabe 1: Liste, in der jedes Teil nur 1 mal erwähnt wird, in Spalte F.
Das habe ich eben mit Englischer Google-Suche "Excel Distinct List" letztendlich irgendwie hinbekommen. (Musste die Befehle natürlich noch übersetzen, aber da gibts ja Seiten)

Jedenfall habe ich dafür
Code:
=WENNFEHLER(INDEX($C$2:$C$16;VERGLEICH(0;ZÄHLENWENN($F$3:F3;$C$2:$C$16);0));"")
benutzt. Das gibt manchmal "0" aus, auch hier im Beispiel, aber habe das alte Bild für die Darstellung genommen, was etwas nervt, aber für meine Anwendung OK ist (und ich kein Bock mehr habe :D )
Dies ist ein Array oder Matrix, deshalb muss man hier STRG+SHIFT+ENTER zur Eingabe drücken, dann einfach den Befehl runter ziehen.


Aufgabe 2: Zusammenzählen der Teile.
Das habe ich dann mit "VBA Funktion selber basteln" gemacht. Hier der Code mit etwas Erklärung für Neulinge wie mich :D :
Code:
Option Explicit

Function Teilezahl(Teilename As String, Teileliste As Range, Teileanzahlliste As Range) As Integer
    Teilezahl = 0
    Dim i As Long   'Zähler in For-Schleife
    Dim z As Long   'Endpunkt der For-Schleife
    z = Teileliste.Rows.Count   'Anzahl der Zeilen im Bereich "Teileliste"
    For i = 1 To z
        If Teileliste(i, 1) = Teilename Then
            Teilezahl = Teilezahl + Teileanzahlliste(i, 1)
        Else
        End If
    Next i
    
End Function

Dann in Excel verwenden:
Code:
=Teilezahl(TeilenameOderZelleMitTeilename;BereichAller$Teile;BereichDerAnzahlAllerTeile)
$Zeichen nicht vergessen, z.B. hier
=Teilezahl(F4;$C$2:$C$16;D$2:$D$16)
Das hätte man theoretisch auch mit nur einem Bereich machen können, aber ich finde das so flexibler.

Ich finde zumindest das zweite ist gut nachvollziehbar, das erste habe ich jetzt nach 1 2 Stunden suche einfach hingenommen als es soweit funktionierte...

Danke für die Tipps :)
Grüße!


€:
Achja, natürlich hat CAD auch ein Stücklistentool. Aber das ist mies bzw. ich blick das nicht so recht wie ich das umstellen kann.
Jedenfalls habe ich da ziemlich viele Heruntergeladene Teile (z.B. Kugellager) und das Tool nimmt dann eben jede einzelne Kugel z.B. als Stück an und Listet diese auf...
Und nervig ist das mit anderen Zukauf-Baugruppen, wo dann x mal 20 Stücke dazukommen die nicht dazugerechnet werden -.-'
 
Zuletzt bearbeitet:
Dies sei von A1 bis B10 beheimatet:
Code:
T1	2
T2	4
T3	6
	
T1	1
T2	3
T3	5
	
T1	2
T3	7
z.B.
Code:
C2:=SUMMEWENN(A1:A;10"=T2";B1:B10)
Resultat ist 7. Was offensichtlich stimmt.
Ich zerwürfele auch immer ZÄHLENWENN und das viel mächtigere SUMMEWENN.

Den Rest, wie etwa die simple Summe-über-Alles, solltest du mit dem Beispiel ganz ohne VBA selbst bauen können.

VBA wäre fällig um vollautomatisch alle (sich ändernden) T-sundsoviel auszuzählen (und natürlich auch zu erkennen), die Formeln ins Blatt zu schreiben und dann auch die Einfach-Summen-Bereiche anzupassen. Habe ich ähnlich selbst schon programmiert

CN8
 
cumulonimbus8 schrieb:
Dies sei von A1 bis B10 beheimatet:
Code:
T1	2
T2	4
T3	6
	
T1	1
T2	3
T3	5
	
T1	2
T3	7
z.B.
Code:
C2:=SUMMEWENN(A1:A;10"=T2";B1:B10)
Resultat ist 7. Was offensichtlich stimmt.
Ich zerwürfele auch immer ZÄHLENWENN und das viel mächtigere SUMMEWENN.

Den Rest, wie etwa die simple Summe-über-Alles, solltest du mit dem Beispiel ganz ohne VBA selbst bauen können.

VBA wäre fällig um vollautomatisch alle (sich ändernden) T-sundsoviel auszuzählen (und natürlich auch zu erkennen), die Formeln ins Blatt zu schreiben und dann auch die Einfach-Summen-Bereiche anzupassen. Habe ich ähnlich selbst schon programmiert

CN8

Toll, hätte ich das früher gewusst hätte ich mir ca. 2h arbeit sparen können :D
Aber so habe ich immerhin mal einen Einblick in VBA gehabt.
 
Moin,
auch wenn es schon als gelöst gekennzeichnet ist eine weitere Lösung: Mit Power Query | Gruppieren ohne eine Zeile Code und weniger als 10 Mausklicks ...
 
Ohje noch was das mit nichts sagt :D

Aber nach kurzem Googlen weiß ich, dass das bei mir sowieso nicht funktionieren würde, da es anscheinend erst seit der 2016er Version gibt, und ich noch auf älteren Versionen arbeite.
 
Zurück
Oben