VBA - Alle Möglichkeiten der Verteilung prüfen
#1
Hallo Zusammen,

in meiner Arbeitsmappe habe ich zwei Tabellen:
Die erste Tabelle (A1:D10) zeigt alle geplanten Maschinen mit dem Start Datum (AGA Start) an dem angefangen werden soll die Maschine zu bauen.
Die zweite Tabelle (F1:I10) zeigt alle Teilespeicher (TSP), die ab dem Datum (POS End) zur Verfügung stehen.

Mein Wunsch ist es nun, dass das Makro die TSP an die Maschinen verteilt damit am Ende die günstigste Option heraus kommt. Der TSP kostet am Tag 5€
Der folgende Code zeigt mir leider nur die Kosten an wenn TSP1 für Maschine1 / TSP2 für Maschine2 / ... / TSP10 für Maschine10 verwendet wird.

Code:
Sub TSP_Simulation()
    Dim TSP_Lastrow As Long, Machine_Lastrow As Long
    Dim Day_min() As Long, tsp_nr() As Long, machine_nr() As Long _
    , Costs() As Long
    Dim tsp() As String, machine() As String
    Dim size_tsp As Integer, size_machine As Integer, TSP_Costs As Integer, Not_available As Integer
    Dim TSP_Range As Range, machine_Range As Range
    
        
    size_tsp = WorksheetFunction.CountA(Worksheets(1).Columns(6))
    size_machine = WorksheetFunction.CountA(Worksheets(1).Columns(1))
    
    TSP_Lastrow = ActiveSheet.Cells(Rows.Count, "I").End(xlUp).Row
    Machine_Lastrow = ActiveSheet.Cells(Rows.Count, "D").End(xlUp).Row
    
    ReDim tsp(size_tsp), machine(size_machine) _
    , tsp_nr(size_tsp), machine_nr(size_machine) _
    , Day_min(size_tsp), Costs(size_machine)
    
    
    
'   Zeitspanne zwischen POS Ende & AGA Start berechnen:
'    MsgBox DateDiff("D", Cells(2, 9).Value, Cells(2, 4).Value) & vbCr & _
            DateDiff("D", Cells(2, 9).Value, Cells(3, 4).Value)
  
    b = 2
    For a = 2 To TSP_Lastrow
        c = 0
    ' Choose first TSP:
        Set TSP_Range = Cells(a, 8)
        tsp(a) = Cells(a, 6).Value
        tsp_nr(a) = Cells(a, 7).Value

    ' Check if Machine has no TSP:
        For b = 2 To Machine_Lastrow
            If IsEmpty(Cells(b, 3)) Then
                DayDiff = DateDiff("D", Cells(a, 9).Value, Cells(b, 4).Value)
                If DayDiff < 0 Then
                    c = c + 1
                    GoTo Line1
                End If
                TSP_Costs = DayDiff * 5
                Costs(c) = TSP_Costs
                machine(c) = Cells(b, 1)
                machine_nr(c) = Cells(b, 2)
            Else: GoTo Line1
            End If
            c = c + 1
Line1:  Next b

        y = Application.Min(Costs)
        Range("J" & a) = Costs(y)
        Range("C" & a) = tsp_nr(a)
        TSP_Range.Value = machine_nr(y)
    Next a
End Sub

Was muss ich ändern, damit wirklich alle Möglichkeiten der Verteilung probiert werden und am Schluss die günstigste Variante angezeigt wird?

Ich hoffe jemand kann mir dabei helfen. Ich weiß, dass der Code wahrscheinlich sehr viel länger wird und das ein großes Makro wird. Wäre euch sehr dankbar wenn mir jemand bei diesem Mamutprojekt behilflich sein kann.

Durch klick auf den Button startet die Simulation, wenn ihr erneut testen wollt müsst ihr die Spalten "C" / "H" / "J" wieder löschen.


Angehängte Dateien
.xlsm   Simulation_Test.xlsm (Größe: 22,9 KB / Downloads: 4)
Top
#2
Hallo M...,

zu
Zitat:Mein Wunsch ist es nun, dass das Makro die TSP an die Maschinen verteilt damit am Ende die günstigste Option heraus kommt. Der TSP kostet am Tag 5€
Ich habe noch nicht verstanden, was zu optimieren ist.
Hier einige Fragen:
1. Für welchen Zeitraum ist die Bezahlung zu berücksichtigen?
2. Kann ich nicht für verschiedene Maschinen den gleichen Teilespeicher nutzen?
3. Wenn der TSP einen Tageswert hat, muss er auch für andere Anwendungen genutzt werden können. Wäre es da nicht sinnvoll, den TSP in der Zeit, in der er nicht für meine Anwendung benötigt wird freizugeben?
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste