У меня есть две таблицы в моей книге.
первая таблица (A1: D10) показывает все машины, которые планируется построить в определенную дату (AGA Start)
во второй таблице (F1: I10) показаны все хранилища, которые готовы к использованию на определенную дату (конец POS)
![enter image description here](https://i.stack.imgur.com/nEBrr.jpg)
Каждый день хранилище не используется, оно стоит (в моем тесте 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
Надеюсь, кто-нибудь может мне помочь с этим.