-2
다음 VBA 코드의 효율성을 향상시키고 싶습니다. 내가 생각할 수있는 것은 코드에서 "With"와 "With With"를 사용하는 것입니다. 코드를 최적화하기 위해 내가 할 수있는 일이 있습니까?다음 VBA 코드의 실행 속도를 최적화하려면 어떻게해야합니까?
감사합니다.
Sub ONLY_CORP_Lives_Premiums()
Dim row_phil, row_phl, row_eveeb, row_evenb As Integer
Dim row_indiv, row_sme, row_corp As Integer
Dim row As Variant
Dim row_start, row_end As Integer
Dim i, k As Integer
Dim start_time, end_time
start_time = Now()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Sheets("SETUP").Range("J32") = Sheets("SETUP").Range("J28")
Sheets("LIVES PROJECTION").Activate
row_phil = Application.CountIf(Range("B1237:B1048576"), "PHIL" & "*")
row_phl = Application.CountIf(Range("B1237:B1048576"), "PHL" & "*") + row_phil
row_eveeb = Application.CountIf(Range("B1237:B1048576"), "EVEEB" & "*") + row_phl
row_evenb = Application.CountIf(Range("B1237:B1048576"), "EVENB" & "*") + row_eveeb
row = Array(0, row_phil, row_phl, row_eveeb, row_evenb)
For i = LBound(row) To (UBound(row) - 1)
row_start = row(i) + 34
row_end = row(i + 1) - 1 + 34
row_indiv = Application.CountIf(Range("d" & row_start & ":d" & row_end), "INDIV")
row_sme = Application.CountIf(Range("d" & row_start & ":d" & row_end), "SME")
row_corp = Application.CountIf(Range("d" & row_start & ":d" & row_end), "CORP")
For k = row_start + row_indiv + row_sme - 34 To row_start + row_indiv + row_sme + row_corp - 1 - 34
With Sheets("LIVES PROJECTION")
.Range("B12:G12").Value = .Range("B34:G34").Offset(k, 0).Value
.Range("B12:FM26").Calculate
End With
Sheets("PREMIUMS PROJECTION").Range("B12:FM26").Calculate
Sheets("LIVES PROJECTION").Range("H34:FM34").Offset(k, 0).Value = Sheets("LIVES PROJECTION").Range("H12:FM12").Value
Sheets("PREMIUMS PROJECTION").Range("H34:FM34").Offset(k, 0).Value = Sheets("PREMIUMS PROJECTION").Range("H12:FM12").Value
Next k
Next i
''
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Sheets("SETUP").Range("J33") = Sheets("SETUP").Range("J28")
Calculate!
end_time = Now()
Sheets("SETUP").Range("j50") = DateDiff("s", start_time, end_time)
End Sub
변수를 특정 형식으로 선언하면 도움이되지만 현재 선언은 각 행의 마지막 변수에만 특정 형식을 제공합니다. VBA에서는 각 변수에 형식이 필요하거나 기본적으로 Variant가됩니다. 또한 Integer 대신 Long을 사용하는 것이 좋습니다. 32,767을 초과하며 Excel 2007 이상에서는 범위가 위험합니다. 변수를 사용하여 각 시트에 대한 참조를 유지하고 두 번 이상 사용하는 모든 범위를 유지합니다. –