2016-08-28 22 views
0

私たちは、エネルギー貯蔵装置(10 '、20'または40 'コンテナ)を使用して、彼らの歴史的な使用法に基づいて最高の行動。私たちは15分の増分データに応じて正しいサイズのuGrid(Energy Storage Solution)を見つけるのに役立つマクロを持っています。計算の主な部分はこのGoalSeekコードですが、完了には時間がかかります。最適化が必要なゴールシークコード

GoalSeekの各繰り返しは、1日あたり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 
+1

のビット代わりに[codereview.se]に。このサイトは問題コードに関する質問です。 –

答えて

0

ループして、あなたのコードは、少なくともより扱いになります...

Dim c As Range, rw As Range 

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 

For Each c In Range("E3:E14") 
    Set rw = c.EntireRow 
    If c.Value = Range("SetNumberkW") Then 
     rw.Cells(4).Value = 0 
    Else 
     rw.Cells(4).Value = 0 
     rw.Cells(7).GoalSeek Goal:=Range("SetNumberkWh"), ChangingCell:=rw.Cells(4) 
    End If 
Next c 

For Each c In Range("F3:F14") 
    Set rw = c.Offset(16, 0).EntireRow 
    If c.Value <= Range("SetNumberkW") Then 
     rw.Cells(4).Value = 0 
    Else 
     rw.Cells(4).Value = 0 
     rw.Cells(5).GoalSeek Goal:=Range("SetNumberkWh"), ChangingCell:=rw.Cells(4) 
    End If 
Next c 
+0

Timありがとうございました。私は、カスタマーサービスの向上とより正確で正確なデザインを提供するために、VGAを通して自分のやり方をハックする無知な初心者です。私は慣れていない新しい用語について学び、変更を導入する夜を過ごすでしょう。もう一度時間をとってくれてありがとう、あなたの知識は明らかに広いです。 – user2585179

関連する問題