Ich habe zwei Kisten eine fasst 15 kg und eine 20 kg. Ich bekomme nun eine Transportaufgabe über eine gewisse Menge ( kg ) die ich in die Kisten verteilen soll.
z.B. 35 kg = 1 Kiste a 15 kg und 1 Kiste a 20 kg ( optimal )
66 kg = 3 x 20 und 1 x 15 ( 9 kg zu wenig in Kiste 15 )
besser : 2 x 20 und 2 x 15 ( nur 4 kg zu wenig in letzter 15 kg Kiste )
( Es werden immer ganze Kisten transportiert )
usw.
Ich habe mir eine Tabelle gemacht bis 400 kg und immer schön von Hand probiert. Was ist aber wenn sich das Fassungsvermögen der Kisten ändert ??? Die ganze Tabelle von vorne …
Das müsste doch auch mit einem kleinen Programm (Makro ) zu schaffen sein das mir immer die günstigste Kombination rechnet.
Hat vielleicht jemand eine Idee ?
Keine Lösung, aber …
Hallo
Dieses Problem wurde in anderer „Verkleidung“ hier schon mal abgehandelt. Ich schätze, es ist etwa ein Jahr her. Es erinnert sich bestimmt noch jemand genauer und kann dir helfen.
ich hatte zunächst versucht das Problem mit dem Solver zu lösen. Funktionierte aber nicht 100%-ig, da ich die Bedingungen nicht alle sauber einschränken konnte.
Meine Makrolösung sieht so aus:
Sub Kisten()
' Für das Gewicht wird die optimale Anzahl Kisten bei minimalem Restleergewicht ermittelt.
Dim Anzahl1 As Integer, Anzahl2 As Integer, Kiste1 As Double, Kiste2 As Double
Dim Anzahl As Integer, DiffGew As Double, Gewicht As Double
Gewicht = ThisWorkbook.Sheets("Tab1").Range("B1").Value 'vorgegebenes Gewicht
Kiste1 = ThisWorkbook.Sheets("Tab1").Range("B3").Value 'max. Gewicht Kiste 1
Kiste2 = ThisWorkbook.Sheets("Tab1").Range("B4").Value 'max. Gewicht Kiste 2
DiffGew = Application.WorksheetFunction.Max(Kiste1, Kiste2)
Anzahl = Application.WorksheetFunction.RoundUp(Gewicht / Kiste1, 0) \_
+ Application.WorksheetFunction.RoundUp(Gewicht / Kiste2, 0)
For I = 0 To Application.WorksheetFunction.RoundUp(Gewicht / Kiste1, 0)
For J = 0 To Application.WorksheetFunction.RoundUp(Gewicht / Kiste2, 0)
If I \* Kiste1 + J \* Kiste2 - Gewicht \>= 0 Then
If DiffGew \>= I \* Kiste1 + J \* Kiste2 - Gewicht Then
If Anzahl \> I + J Then
DiffGew = I \* Kiste1 + J \* Kiste2 - Gewicht
Anzahl1 = I
Anzahl2 = J
Exit For
End If
End If
End If
Next J
Next I
ThisWorkbook.Sheets("Tab1").Range("D3").Value = Anzahl1 'Anzahl Kisten 1
ThisWorkbook.Sheets("Tab1").Range("D4").Value = Anzahl2 'Anzahl Kisten 2
End Sub
zugehörige Tabelle: Tab1
A B C D
1 Gewicht 22 kg
2 Anzahl
3 Kiste 1 20 kg 0
4 Kiste 2 15 kg 2
5
6 Gesamtanzahl 2
7 Restkilogramm 8
Benutzte Formeln:
D6: =SUMME(D3:smiley:4)
D7: =B3\*D3+B4\*D4-B1
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]