2016-08-28 4 views
0

우리는 기업이 에너지 요구량을 줄이는 데 도움이되도록 에너지 저장 장치 (10 ', 20'또는 40 '컨테이너)를 사용하여 무엇이 무엇인지 알 수있는 고급 알고리즘을 갖춘 거대한 뇌를 사용합니다. 그들의 역사적인 사용법에 기초한 최선의 행동. 우리는 15 분 단위의 증분 데이터에 따라 올바른 크기의 uGrid (Energy Storage Solution)를 찾는 데 도움이되는 매크로를 가지고 있습니다. Google 계산의 주요 부분은 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 
+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