Мы помогаем компаниям снизить плату за потребление энергии, для этого мы используем накопитель энергии (10 ', 20' или 40 'контейнеров) с огромным мозгом, который имеет передовые алгоритмы, чтобы знать, что такое лучшее действие, основанное на их историческом использовании. У нас есть макрос, который помогает нам найти правильный размер uGrid (Energy Storage Solution) в зависимости от их 15-минутных инкрементных данных. Основная часть нашего расчета - это код GoalSeek, но это занимает много времени.Код GoalSeek, который нуждается в оптимизации
Каждая итерация GoalSeek проходит через данные за каждый месяц, состоящий из 96 разделенных точек данных в день. Таким образом, набор данных за полный год содержит 35 040 строк интервальных данных.
В листе есть много других расчетов, из которых мы получаем понимание того, какую систему нам нужно проектировать.
Какие идеи у вас есть, чтобы сделать это более эффективным?
If Range("H1") > 1 Then
Application.EnableEvents = False 'Prevent looping based on the 'change' caused by multiplication
Cells(16, 7) = Cells(16, 7) * Range("H1")
Application.EnableEvents = True 'allow events again
End If
If Range("E3") = Range("SetNumberkW") Then
'Range("D3").Value = 0
Else:
Range("D3").Value = 0
Range("G3").GoalSeek Goal:=Range("SetNumberkWh"), ChangingCell:=Range("D3")
End If
If Range("E4") = Range("SetNumberkW") Then
Range("D4").Value = 0
Else:
Range("D4").Value = 0
Range("G4").GoalSeek Goal:=Range("SetNumberkWh"), ChangingCell:=Range("D4")
End If
If Range("E5") = Range("SetNumberkW") Then
Range("D5").Value = 0
Else:
Range("D5").Value = 0
Range("G5").GoalSeek Goal:=Range("SetNumberkWh"), ChangingCell:=Range("D5")
End If
If Range("E6") = Range("SetNumberkW") Then
Range("D6").Value = 0
Else:
Range("D6").Value = 0
Range("G6").GoalSeek Goal:=Range("SetNumberkWh"), ChangingCell:=Range("D6")
End If
If Range("E7") = Range("SetNumberkW") Then
Range("D7").Value = 0
Else:
Range("D7").Value = 0
Range("G7").GoalSeek Goal:=Range("SetNumberkWh"), ChangingCell:=Range("D7")
End If
If Range("E8") = Range("SetNumberkW") Then
Range("D8").Value = 0
Else:
Range("D8").Value = 0
Range("G8").GoalSeek Goal:=Range("SetNumberkWh"), ChangingCell:=Range("D8")
End If
If Range("E9") = Range("SetNumberkW") Then
Range("D9").Value = 0
Else:
Range("D9").Value = 0
Range("G9").GoalSeek Goal:=Range("SetNumberkWh"), ChangingCell:=Range("D9")
End If
If Range("E10") = Range("SetNumberkW") Then
Range("D10").Value = 0
Else:
Range("D10").Value = 0
Range("G10").GoalSeek Goal:=Range("SetNumberkWh"), ChangingCell:=Range("D10")
End If
If Range("E11") = Range("SetNumberkW") Then
Range("D11").Value = 0
Else:
Range("D11").Value = 0
Range("G11").GoalSeek Goal:=Range("SetNumberkWh"), ChangingCell:=Range("D11")
End If
If Range("E12") = Range("SetNumberkW") Then
Range("D12").Value = 0
Else:
Range("D12").Value = 0
Range("G12").GoalSeek Goal:=Range("SetNumberkWh"), ChangingCell:=Range("D12")
End If
If Range("E13") = Range("SetNumberkW") Then
Range("D13").Value = 0
Else:
Range("D13").Value = 0
Range("G13").GoalSeek Goal:=Range("SetNumberkWh"), ChangingCell:=Range("D13")
End If
If Range("E14") = Range("SetNumberkW") Then
Range("D14").Value = 0
Else:
Range("D14").Value = 0
Range("G14").GoalSeek Goal:=Range("SetNumberkWh"), ChangingCell:=Range("D14")
End If
' Start the kW offset part of the programming
If Range("F3") <= Range("SetNumberkW") Then
Range("D19").Value = 0
Else:
Range("D19").Value = 0
Range("F19").GoalSeek Goal:=Range("SetNumberkW"), ChangingCell:=Range("D19")
End If
If Range("F4") <= Range("SetNumberkW") Then
Range("D20").Value = 0
Else:
Range("D20").Value = 0
Range("F20").GoalSeek Goal:=Range("SetNumberkW"), ChangingCell:=Range("D20")
End If
If Range("F5") <= Range("SetNumberkW") Then
Range("D21").Value = 0
Else:
Range("D21").Value = 0
Range("f21").GoalSeek Goal:=Range("SetNumberkW"), ChangingCell:=Range("D21")
End If
If Range("F6") <= Range("SetNumberkW") Then
Range("D22").Value = 0
Else:
Range("D22").Value = 0
Range("f22").GoalSeek Goal:=Range("SetNumberkW"), ChangingCell:=Range("D22")
End If
If Range("F7") <= Range("SetNumberkW") Then
Range("D23").Value = 0
Else:
Range("D23").Value = 0
Range("f23").GoalSeek Goal:=Range("SetNumberkW"), ChangingCell:=Range("D23")
End If
If Range("F8") <= Range("SetNumberkW") Then
Range("D24").Value = 0
Else:
Range("D24").Value = 0
Range("F24").GoalSeek Goal:=Range("SetNumberkW"), ChangingCell:=Range("D24")
End If
If Range("F9") <= Range("SetNumberkW") Then
Range("D25").Value = 0
Else:
Range("D25").Value = 0
Range("F25").GoalSeek Goal:=Range("SetNumberkW"), ChangingCell:=Range("D25")
End If
If Range("F10") <= Range("SetNumberkW") Then
Range("D26").Value = 0
Else:
Range("D26").Value = 0
Range("F26").GoalSeek Goal:=Range("SetNumberkW"), ChangingCell:=Range("D26")
End If
If Range("F11") <= Range("SetNumberkW") Then
Range("D27").Value = 0
Else:
Range("D27").Value = 0
Range("F27").GoalSeek Goal:=Range("SetNumberkW"), ChangingCell:=Range("D27")
End If
If Range("F12") <= Range("SetNumberkW") Then
Range("D28").Value = 0
Else:
Range("D28").Value = 0
Range("F28").GoalSeek Goal:=Range("SetNumberkW"), ChangingCell:=Range("D28")
End If
If Range("F13") <= Range("SetNumberkW") Then
Range("D29").Value = 0
Else:
Range("D29").Value = 0
Range("F29").GoalSeek Goal:=Range("SetNumberkW"), ChangingCell:=Range("D29")
End If
If Range("F14") <= Range("SetNumberkW") Then
Range("D30").Value = 0
Else:
Range("D30").Value = 0
Range("F30").GoalSeek Goal:=Range("SetNumberkW"), ChangingCell:=Range("D30")
End If
Если рабочий код, который вы хотите рецензирование для того, чтобы оптимизировать ваш вопрос должен быть размещен на [codereview.se]. Этот сайт предназначен для вопросов с проблемным кодом. –