Registriert seit: 21.11.2016
Version(en): Excel 2010
Hallo liebe Excel Freunde
Ich habe folgende Aufgabe/Herausforderung:
Welche verschiedenen Möglichkeiten gibt es, die Schubladen (50mm, 75mm, 100mm, 125mm, 150mm, 200mm, 250mm, 300mm) in das Gehäuse (550mm) einzubauen. Gibt es im Excel eine Formel, die mir das ausrechnet und alle Varianten zeigt? Es spielt keine Rolle wo die einzelnen Schubladen im Gehäuse angeordnet sind.
Ohne geeignete Formel müsste ich jede einzelne Variante aufschreiben.
Bsp.: 3
300mm + 250mm
300mm + 200mm + 50mm
300mm + 150mm + 100mm
300mm + 150mm + 50mm + 50m
300mm + 125mm + 125mm
300mm + 125mm + 75mm + 50mm
Vielen Dank für eure Hilfe
Registriert seit: 06.12.2015
Version(en): 2016
21.11.2016, 16:36
(Dieser Beitrag wurde zuletzt bearbeitet: 21.11.2016, 16:36 von Fennek.)
Hallo,
hier ist ein Verschlag:
Code: Sub toeg()
Dim F(6)
Ar = Array(50, 75, 100, 125, 150, 250, 300)
Ziel = 550 '<<<<<<<<< hier den Zielwert eingeben >>>>>>>>>>>>>
For i = 0 To 127
For j = 0 To 6
F(j) = IIf((2 ^ j And i) > 0, 1, 0)
'Debug.Print i, F(j)
Next j
If WorksheetFunction.SumProduct(Ar, F) = Ziel Then
Ausgabe = ""
For k = 0 To 6
If F(k) <> 0 Then Ausgabe = Ausgabe & Ar(k) & " + "
Next k
Debug.Print Left(Ausgabe, Len(Ausgabe) - 3)
End If
Next i
End Sub
Eventuell ist es nötig darauf hinzuweisen, dass die Ausgabe ins VBA-Direktfenster erfolgt.
Ein feedback wäre nett.
mfg
Registriert seit: 12.03.2016
Version(en): Excel 2003
Hallo,
selbstverständlich kann man eine vollständige Übersicht über alle Möglichkeiten erstellen. Ich nehme an es geht um Elektronik Einschübe im 19 Zoll Gehäuse oder ähnliches. Wäre mir als alter Praktiker zu unübersichtlich, zu aufwendig.
Meine Empfehlung: in einer Excel Tabelle in Zelle A1 die Grösse eingeben, in Zelle A2 eine Summenformel ab A4 nach unten, und dann ab A4 die Schubladen mit der grössten zuerst eintragen. Rechts in C2 Subtraction wieviel als Rest noch übrig bleibt. Und Formatiere die Zelle C2 auf Rot für Negativ Zahlen.
mfg Gast 123
550 Grösse Rest (550 als feste Eingabe)
550 Einschub 0 (550 über Summenformel)
300 Schublade 1
125 Schublade 2
75
50
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Fennek,
Dein Code bringt mir nur 5 Ergebnisse?
75 + 100 + 125 + 250
50 + 100 + 150 + 250
50 + 75 + 125 + 300
100 + 150 + 300
250 + 300
Die Lösungen haben bis zu 11 Summanden (11 x 50) Wie ich darauf komme? In dieser Lösung des TE gibt es die 50er 2x:
300mm + 150mm + 50mm + 50m
Da nicht festgelegt ist, wie oft es jede Schublade gibt und im Beispiel schon eine 2x vorkommt, vermute ich, dass der TE ausreichend Schubladen hat
Allerdings gehe ich auch noch davon aus, dass 50m ein Schreibfehler ist und nicht eine entsprechend breite Schublade zurecht gestaucht wird
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 06.12.2015
Version(en): 2016
Hallo Schaun,
klares Argument, das ich nicht berücksichtigt habe. Mal sehen, ob mir dazu noch etwas einfällt.
mfg
Registriert seit: 06.12.2015
Version(en): 2016
Hallo André,
nachts bin ich am kreativsten.
Da es m.M.n. nicht möglich ist, mit vertretbarem Aufwand alle Möglichkeiten durch zu probieren, hatte ich eine andere Idee:
Mein kleiner Code muss ergänzt werden mit der Berücksichtigung ganzzahliger Vielfache:
50mm, 75mm, 100mm, 125mm, 150mm, 200mm, 250mm, 300mm
Da
300 = 250 + 50
250 = 200 + 50
200 = 150 + 50
150 = 100 + 50
150 = 75 + 75
100 = 50 + 50
muss, soweit möglich, jede gefunden Möglichkeit noch einmal aufgeteilt werden.
Sollte einfach machbar sein, aber ich werde es nicht programmieren.
mfg
Registriert seit: 13.04.2014
Version(en): 365, 2019
24.11.2016, 09:41
(Dieser Beitrag wurde zuletzt bearbeitet: 24.11.2016, 10:34 von BoskoBiati.)
Hallo,
ist auch einfach, aber etwas Schreibarbeit:
Code: Sub Kombi()
Dim loA300 As Long
Dim loA250 As Long
Dim loA200 As Long
Dim loA150 As Long
Dim loA125 As Long
Dim loA100 As Long
Dim loA75 As Long
Dim loA50 As Long
Dim lob As Long
Dim strSchub As String
Dim varBr(7) As Variant
Dim arrBr As Variant
Dim loletzte As Long
loletzte = Cells(Rows.Count, 1).End(xlUp).Row
arrBr = Array(300, 250, 200, 150, 125, 100, 75, 50)
For lob = 0 To 7
varBr(lob) = arrBr(lob)
Next
For loA300 = 0 To 1
For loA250 = 0 To 1
For loA200 = 0 To 2
For loA150 = 0 To 3
For loA125 = 0 To 4
For loA100 = 0 To 5
For loA75 = 0 To 7
For loA50 = 0 To 11
If loA300 * varBr(0) + loA250 * varBr(1) + loA200 * varBr(2) + loA150 * varBr(3) + loA125 * varBr(4) + loA100 * varBr(5) + loA75 * varBr(6) + loA50 * varBr(7) = 550 Then
If loA300 <> 0 Then
strSchub = loA300 & "x " & varBr(0) & "mm, "
End If
If loA250 <> 0 Then
strSchub = strSchub & loA250 & "x " & varBr(1) & "mm,"
End If
If loA200 <> 0 Then
strSchub = strSchub & loA200 & "x " & varBr(2) & "mm,"
End If
If loA150 <> 0 Then
strSchub = strSchub & loA150 & "x " & varBr(3) & "mm,"
End If
If loA125 <> 0 Then
strSchub = strSchub & loA125 & "x " & varBr(4) & "mm,"
End If
If loA100 <> 0 Then
strSchub = strSchub & loA100 & "x " & varBr(5) & "mm,"
End If
If loA75 <> 0 Then
strSchub = strSchub & loA75 & "x " & varBr(6) & "mm,"
End If
If loA50 <> 0 Then
strSchub = strSchub & loA50 & "x " & varBr(7) & "mm,"
End If
Cells(loletzte, 1) = Left(strSchub, Len(strSchub) - 2)
loletzte = loletzte + 1
strSchub = ""
End If
Next
Next
Next
Next
Next
Next
Next
Next
End Sub
Gruß
Edgar
Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Registriert seit: 13.04.2014
Version(en): 365, 2019
Hallo,
hier noch eine Tabellendarstellung der Kombinationen:
Code: Sub Kombi2()
Dim rng As Range
Dim loA300 As Long
Dim loA250 As Long
Dim loA200 As Long
Dim loA150 As Long
Dim loA125 As Long
Dim loA100 As Long
Dim loA75 As Long
Dim loA50 As Long
Dim lob As Long
Dim strSchub As String
Dim varBr(7) As Variant
Dim arrBr As Variant
Dim loletzte As Long
ActiveSheet.UsedRange.ClearContents
arrBr = Array(300, 250, 200, 150, 125, 100, 75, 50)
For lob = 0 To 7
Cells(1, lob + 1) = arrBr(lob)
varBr(lob) = arrBr(lob)
loletzte = 2
Next
For loA300 = 1 To 0 Step -1
For loA250 = 1 To 0 Step -1
For loA200 = 2 To 0 Step -1
For loA150 = 3 To 0 Step -1
For loA125 = 4 To 0 Step -1
For loA100 = 5 To 0 Step -1
For loA75 = 7 To 0 Step -1
For loA50 = 11 To 0 Step -1
If loA300 * varBr(0) + loA250 * varBr(1) + loA200 * varBr(2) + loA150 * varBr(3) + loA125 * varBr(4) + loA100 * varBr(5) + loA75 * varBr(6) + loA50 * varBr(7) = 550 Then
Cells(loletzte, 1) = loA300
Cells(loletzte, 2) = loA250
Cells(loletzte, 3) = loA200
Cells(loletzte, 4) = loA150
Cells(loletzte, 5) = loA125
Cells(loletzte, 6) = loA100
Cells(loletzte, 7) = loA75
Cells(loletzte, 8) = loA50
loletzte = loletzte + 1
End If
Next
Next
Next
Next
Next
Next
Next
Next
Set rng = Range("A1:H" & loletzte - 1)
With rng.Borders
.LineStyle = xlThin
.ColorIndex = 0
End With
End Sub
Gruß
Edgar
Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Folgende(r) 1 Nutzer sagt Danke an BoskoBiati für diesen Beitrag:1 Nutzer sagt Danke an BoskoBiati für diesen Beitrag 28
• toeg
Registriert seit: 06.12.2015
Version(en): 2016
Hallo Bosko,
sieht gut aus!
mfg
|