VBA Проверить все варианты, выбрать самый дешевый - PullRequest
0 голосов
/ 26 октября 2018

У меня есть две таблицы в моей книге. первая таблица (A1: D10) показывает все машины, которые планируется построить в определенную дату (AGA Start) во второй таблице (F1: I10) показаны все хранилища, которые готовы к использованию на определенную дату (конец POS)

enter image description here

Каждый день хранилище не используется, оно стоит (в моем тесте 5 $ в день). Теперь я хочу, чтобы макрос использовал все возможности для распределения хранилищ на машины, которые будут показаны самым дешевым способом.

Следующий код показывает только затраты, когда TSP1 используется для Machine1 / TSP2 для machine2 / ... / TSP10 для Machine10:

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)

    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

Надеюсь, кто-нибудь может мне помочь с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...