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

Verschnittberechnung

Verschnittberechnung
30.06.2014 13:00:44
Stef26

Hallo Zusammen,
ich muss ein älteres Thema von mir leider noch mal aufgreifen...
Ich habe in meiner Liste in Spalte A Längenangaben von Rohren.
Das Gesamtrohr ist 4m lang. Es geht darum aus der geforderten Liste in Spalte die Zusammenstellung so zu berechnen, so dass am ende am wenigsten Restmaterial übrig bleibt.
Mit der bisherigen Rechnung wird nach größe sortiert und immer versucht die noch größte Rohrlänge zu verwenden. Leider hat dieses System seine schwächen.
Hat jemand ne Idee (muss keine Umsetzung sein) wie man Rohre noch besser zusammenstellen kann, so dass man möglichst wenig Verschnitt hat.
Hab mal ein Beispiel, bei dem man sehr viel Verschnitt hat, da die Zusammenstelung nicht optimal ist.
https://www.herber.de/bbs/user/91329.xlsm
Bin für jede noch so kleine Hilfe dankbar. Sei es Rechenweg oder ähnliches
Liebe Grüße
Stefan

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Verschnittberechnung
30.06.2014 14:49:47
AndreasG
Hallo Stefan,
ich fürchte du hast hier kein wirkliches Excelproblem sonderen eher ein "Optimierungsproblem" (im mathematischen Sinne).
Ich bin da jetzt auch kein Experte, aber hier: http://de.wikipedia.org/wiki/Liste_numerischer_Verfahren gibt es verschiedene Ansätze zur Lösung.
Excel ist m.E: nicht das Werkzeug der Wahl dafür.
Grüße
Andreas

AW: Verschnittberechnung
30.06.2014 15:14:04
Stef26
Danke Andreas für den Link.
Leider verstehe ich nicht mal die hälfte davon...
Ich habe aber gegoogelt, anscheinend gibt es schon solche Berechnungen.
(Holz Verschnittsberechnung - ist ja so wie bei mir)
Ein langes Teil und wie schneide ich das am günstigsten ab...
D.h. mir ist klar das selber zu erstellen ist enorm.
Wer hat vielleicht noch Quellen Links die sich mit dem Thema beschäftigt haben.
Liebe Grüße
Stefan

Anzeige
AW: google
30.06.2014 15:28:37
UweD
https://www.google.de/?gws_rd=ssl#q=zuschnittoptimierung&safe=active

AW: Verschnittberechnung
30.06.2014 16:04:26
Daniel
Hi
mal eine Lösungsvariante die auf dem Zufallsprinzip funktioniert.
dh es werden in einer Schleife zufällige Zusammenstellungen auf ihren Verschnitt berechnet.
die Schleife bricht sofort ab, wenn der Optimale Verschnitt erreicht ist.
wird der optimale Verschnitt nicht erreicht, läuft die Schleife durch (anzahl der Schleifendurchläufe kannst du einstellen) und das beste Ergbenis wird verwendet.
für die gezeigten Daten läufts ganz brauchbar und man muss sich nicht mit irgendwelchen komplexen Algorhythmen plagen.
https://www.herber.de/bbs/user/91336.xlsm
Gruß Daniel

Anzeige
AW: Verschnittberechnung
30.06.2014 16:42:27
Stef26
WoW Daniel,
ich bin ein bisschen sprachlos.
Vielen vielen Dank. Das du mir gleich ein fertiges Programm machst, damit hab ich gar nicht gerechnet.
Es funktioniert zu meiner vollsten Zufriedenheit. Endlich hab ich weniger Abfall.
Besten Dank !!!
Liebe Grüße auch an alle anderen, die sich meinem Problem angenommen haben
Super FORUM!!!
:-)
Stefan

AW: Verschnittberechnung
30.06.2014 17:41:14
fcs
Hallo Stefan,
ich hab auch mal eine leicht optinmierte Fassung des ursprünglich von mir erstelltem Makros erstellt.
Es findet noch eine zusätzliche Prüfung der Min-/Max-Längen der jeweils noch nicht zugewiesenen Abschnittslängen statt.
Das Makro probiert dann ob es günstiger ist, 2 oder mehr kurze Stücke aus der Restlänge zuzuschneiden, statt eines langen Stücks.
Gruß
Franz
Sub Berechnen()
Application.ScreenUpdating = False
Dim wksBer As Worksheet
Dim wksVor As Worksheet
Dim wksRohrList As Worksheet
Dim EndeList As Long
Dim ZeileIter As Long
Dim dblLaengeMax As Double, dblLaengeMin As Double
Dim dblLaengeRohr As Double, dblLaengeSchnitt As Double, dblLaengeRest As Double, _
dblBreiteSchnitt As Double
Dim Zeile As Long, NrRohr As Long, ZeileBer As Long, ZeileLetzte As Long, ZeileVorletzte As  _
Long
Set wksBer = ActiveWorkbook.Worksheets("Berechnung")
Set wksVor = ActiveWorkbook.Worksheets("Vorgabe")
'Vorgabewerte einlesen
With wksVor
dblLaengeRohr = .Range("C2").Value
dblBreiteSchnitt = .Range("C3").Value
End With
With wksBer
'prüfen, ob Rohrlängen in Spalte A eingetragen sind
Zeile = .Cells(.Rows.Count, 1).End(xlUp).Row
If Zeile < 2 Then
MsgBox "Keine Daten für Rohrlängen vorhanden!"
Exit Sub
End If
'Daten im Berechnungsbereich löschen
ZeileBer = .Cells(.Rows.Count, 5).End(xlUp).Row
If ZeileBer > 2 Then
.Range(.Cells(3, 5), .Cells(ZeileBer, 7)).ClearContents
End If
'ggf. vorhandene Einträge für Rohrnummer und Verschnitt löschen
Zeile = .Cells(.Rows.Count, 2).End(xlUp).Row
If Zeile >= 2 Then
.Range(.Cells(2, 2), .Cells(Zeile, 3)).ClearContents
Else
'  MsgBox "Keine Daten für Rohrlängen AAA vorhanden!"
'  Exit Sub
End If
'Daten in Berechnungsbreich übernehmen
ZeileBer = 2
For Zeile = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
ZeileBer = ZeileBer + 1
.Cells(ZeileBer, 5).Value = Zeile
.Cells(ZeileBer, 6).Value = .Cells(Zeile, 1).Value
Next
'Rohrlängen im Berechnungsbereich absteigend sortieren
With .Range(.Cells(2, 5), .Cells(ZeileBer, 7))
.Sort key1:=.Range("B1"), order1:=xlDescending, Header:=xlYes
End With
Do
NrRohr = NrRohr + 1
dblLaengeRest = dblLaengeRohr
ZeileIter = 3
ZeileLetzte = 0
'nächste Iteraration
Iteration:
For Zeile = ZeileIter To ZeileBer
If IsEmpty(.Cells(Zeile, 7)) Then
dblLaengeSchnitt = .Cells(Zeile, 6)
dblLaengeMax = fncLaengeMax
dblLaengeMin = fncLaengeMin
Select Case dblLaengeRest - dblLaengeSchnitt - dblBreiteSchnitt
Case Is < 0
'do nothing
Case Is >= dblLaengeMax
dblLaengeRest = dblLaengeRest - dblLaengeSchnitt - dblBreiteSchnitt
.Cells(Zeile, 7) = NrRohr
ZeileVorletzte = Zeile
ZeileLetzte = .Cells(Zeile, 5) 'Zeile des Schnitts merken
Case Is >= dblLaengeMin
dblLaengeRest = dblLaengeRest - dblLaengeSchnitt - dblBreiteSchnitt
.Cells(Zeile, 7) = NrRohr
ZeileVorletzte = Zeile
ZeileLetzte = .Cells(Zeile, 5) 'Zeile des Schnitts merken
Case Is <= 100  'Minimal tolerierter Verschnitt
dblLaengeRest = dblLaengeRest - dblLaengeSchnitt - dblBreiteSchnitt
.Cells(Zeile, 7) = NrRohr
ZeileVorletzte = Zeile
ZeileLetzte = .Cells(Zeile, 5) 'Zeile des Schnitts merken
Exit For
Case Else
Select Case dblLaengeRest
Case Is >= dblLaengeMin + dblLaengeMax + dblBreiteSchnitt
If dblLaengeMax = dblLaengeSchnitt Then
dblLaengeRest = dblLaengeRest - dblLaengeSchnitt - dblBreiteSchnitt
.Cells(Zeile, 7) = NrRohr
ZeileVorletzte = Zeile
ZeileLetzte = .Cells(Zeile, 5) 'Zeile des Schnitts merken
End If
Case Is >= 2 * dblLaengeMin + dblBreiteSchnitt
If dblLaengeMin = dblLaengeSchnitt Then
dblLaengeRest = dblLaengeRest - dblLaengeSchnitt - dblBreiteSchnitt
.Cells(Zeile, 7) = NrRohr
ZeileVorletzte = Zeile
ZeileLetzte = .Cells(Zeile, 5) 'Zeile des Schnitts merken
End If
Case Is >= dblLaengeMax
If dblLaengeMax = dblLaengeSchnitt Then
dblLaengeRest = dblLaengeRest - dblLaengeSchnitt - dblBreiteSchnitt
.Cells(Zeile, 7) = NrRohr
ZeileVorletzte = Zeile
ZeileLetzte = .Cells(Zeile, 5) 'Zeile des Schnitts merken
End If
Case Is >= dblLaengeMin
If dblLaengeMin = dblLaengeSchnitt Then
dblLaengeRest = dblLaengeRest - dblLaengeSchnitt - dblBreiteSchnitt
.Cells(Zeile, 7) = NrRohr
ZeileVorletzte = Zeile
ZeileLetzte = .Cells(Zeile, 5) 'Zeile des Schnitts merken
End If
Case Is < dblLaengeMin
ZeileIter = ZeileVorletzte + 1
'.Cells(ZeileVorletzte, 7).ClearContents
ZeileVorletzte = ZeileVorletzte + 1
GoTo Iteration
End Select
End Select
End If
Next
.Cells(ZeileLetzte, 3).Value = dblLaengeRest
'Prüfen, ob für alle Rohrschnitte eine Rohr-Nr. eingetragen ist
If Application.WorksheetFunction.CountBlank(.Range(.Cells(2, 7), _
.Cells(ZeileBer, 7))) = 0 Then Exit Do
Loop
'Berechnungsbereich nach Zeile sortieren
With .Range(.Cells(2, 5), .Cells(ZeileBer, 7))
.Sort key1:=.Range("A1"), order1:=xlAscending, Header:=xlYes
End With
'Ergebnis kopieren
.Range(.Cells(3, 7), .Cells(ZeileBer, 7)).Copy
.Cells(2, 2).PasteSpecial Paste:=xlPasteValues
'Berechnungsbereich nach Nummer-Rohr sortieren
With .Range(.Cells(2, 5), .Cells(ZeileBer, 7))
.Sort key1:=.Range("C1"), order1:=xlAscending, Header:=xlYes
End With
End With
Application.ScreenUpdating = True
End Sub
Function fncLaengeMax() As Double
Dim wksBer As Worksheet
Dim dblLaengeMax As Double
Dim Zeile As Long
Set wksBer = ActiveWorkbook.Worksheets("Berechnung")
dblLaengeMax = 0
With wksBer
For Zeile = 3 To .Cells(.Rows.Count, 5).End(xlUp).Row
If .Cells(Zeile, 7) = "" Then
If .Cells(Zeile, 6) > dblLaengeMax Then
dblLaengeMax = .Cells(Zeile, 6)
End If
End If
Next
End With
fncLaengeMax = dblLaengeMax
End Function
Function fncLaengeMin() As Double
Dim wksBer As Worksheet
Dim dblLaengeMin As Double
Dim Zeile As Long
Set wksBer = ActiveWorkbook.Worksheets("Berechnung")
dblLaengeMin = 50000
With wksBer
For Zeile = 3 To .Cells(.Rows.Count, 5).End(xlUp).Row
If .Cells(Zeile, 7) = "" Then
If .Cells(Zeile, 6) < dblLaengeMin Then
dblLaengeMin = .Cells(Zeile, 6)
End If
End If
Next
End With
fncLaengeMin = dblLaengeMin
End Function

Anzeige
AW: Verschnittberechnung
30.06.2014 18:34:15
Stef26
Hallo Franz,
ach du meine Güte ist das ein aufwendiger Code. Da hast du dir aber
jede Menge Arbeit gemacht.
Werde den Code gleich mal testen und mit dem vorhgandenen vergleichen.
Ich meld mich nochmal....
Danke schonmal
:-)
Stefan

AW: Verschnittberechnung
30.06.2014 18:42:36
Stef26
BOMBE !!!!!!!!!!!!!
Jetzt kann das Thema abgeschlossen werden, denn ich kann mir nicht vorstellen, das
das noch zu toppen ist.
Absoluter Wahnsinn
Ich krieg mich nicht mehr ein, aber das was du da gezaubert hast ist ja absolute Sahne.
DANKE DANKE DANKE
Mir würde schon ein wenig von deinen Fähigkeiten reichen
Besten Dank
:-)
Stefan

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige