2016-06-11 3 views
1

처리하는 데 오랜 시간이 걸리는 매크로가 있습니다. 이 주된 이유는 수식을 사용하여 범위를 채우는 루프입니다.VBA Excel 계산이 천천히

속도를 높이기 위해 범위에서 자동 완성 기능을 사용하여 수식을 빠르게 채 웁니다. 이 작동하지만 매크로를 실행할 때 수식을 업데이트하려면 shift + F9를 눌러야합니다.

Excel에서 계산을 처리하는 데 20 분이 걸리지 만 수식으로 범위를 채우는 데 20 초 밖에 걸리지 않습니다.

Excel에서 수식을 더 빠르게 업데이트 할 수있는 해결 방법이 있습니까?

나는 범위를 무너 뜨리고 activesheet.calculation 함수를 사용해 보았지만 모든 것이 느려졌다. 당신이 루프 동안 화면과 계산의 업데이트를 해제 할 수있는 경우

Sheets("Sheet").Range(CL1 & i.Row).Formula = "=ROUND(IF(Trim(Left(" & CL1 & "$2,4))="""",""Missing Value"",IF($B" & i.Row & "=""Sheet1"",SUMIFS(INDIRECT(""'""&$B" & i.Row & "&""'!""&SUBSTITUTE(ADDRESS(1,MATCH(trim(left(" & CL1 & "$2,4))&"" - Total"",Sheet2!$1:$1,0),4),""1"","""")&"":""&" & _ "SUBSTITUTE(ADDRESS(1,MATCH(trim(left(" & CL1 & "$2,4))&"" - Total"",Sheet2!$1:$1,0),4),""1"","""")),INDIRECT(""'""&$B" & i.Row & "&""'!""&SUBSTITUTE(ADDRESS(1,MATCH($C$3,Sheet2!$1:$1,0),4),""1"","""")&"":""& " & _ "SUBSTITUTE(ADDRESS(1,MATCH($C$3,Sheet2!$1:$1,0),4),""1"","""")),$C" & i.Row & ",INDIRECT(""'""&$B" & i.Row & "&""'!""&SUBSTITUTE(ADDRESS(1,MATCH($D$3,Sheet2!$1:$1,0),4),""1"","""")&"":""&" & _ "SUBSTITUTE(ADDRESS(1,MATCH($D$3,Sheet2!$1:$1,0),4),""1"","""")),$D" & i.Row & "),IF($B" & i.Row & "=""SOI"",IFERROR(SUMIFS(INDIRECT(""'SOI'!""&SUBSTITUTE(ADDRESS(1,MATCH($C" & i.Row & ", Sheet3!$1:$1,0)+2,4),""1""," & """"") & "":"" &SUBSTITUTE(ADDRESS(1,MATCH($C" & i.Row & ",SOI!$1:$1,0)+2,4),""1"","""")),INDIRECT(""'SOI'!""&SUBSTITUTE(ADDRESS(1,MATCH($C" & i.Row & ",SOI!$1:$1,0)+0,4),""1"","""") & "":"" &SUBSTITUTE(ADDRESS(1," & _ "MATCH($C" & i.Row & ",Sheet4!$1:$1,0)+0,4),""1"","""")),Trim(Left(" & CL1 & "$2,4)),INDIRECT(""'SOI'!""&SUBSTITUTE(ADDRESS(1,MATCH($C" & i.Row & ", Sheet3!$1:$1,0)+1,4),""1"","""") & "":"" &SUBSTITUTE(ADDRESS(1,MATCH($C" & i.Row & ",SOI!$1:$1,0)+1," & "4),""1"","""")),$D" & i.Row & "),""Classification Error""),if(B" & i.Row & "=""Unrealised"",INDEX(INDIRECT($B" & i.Row & "&""!A:ZZ""),MATCH($D" & i.Row & ",INDIRECT($B" & i.Row & "&""!A:A""),0),MATCH(trim(Left(" & CL1 & "$2,4))&"" - Movement"",INDIRECT($B" & i.Row & "&""!2:2""),0)),""Sheet Name Error"")" & _ ",if(B" & i.Row & "=""SOFP"",SUMIF(Sheet4!" & Str & ": A" & fin_Row & ", A" & i.Row & ",INDEX(Sheet3!E" & str_Row & ":" & fin_Col & fin_Row & ",0,MATCH(LEFT(" & CL1 & "$2,4), Sheet3!" & "E2:" & fin_Col & "2,0))),""Sheet Name Error""))),)" 
+1

수식을 단순화하거나 수식을 사용하는 대신 코드에서 값을 계산하십시오. 그러나 질문에는 코드 또는 수식이 없으므로 어떤 대답을 기대합니까? – BrakNicku

+0

안녕 Brak, 코드 작업에서 모든 기밀입니다 - 미안 해요. 제 질문은 Excel에서 수식을 업데이트하는 방식과 더 빠른 방법에 관한 것입니다. – Lowpar

+0

그런 다음 다른 데이터와 필드 이름이있는 단순화 된 버전을 표시하여 개념을 볼 수 있습니다. – Mike

답변

1

, 그것은 상당히 각각의 공식 삽입 다시 계산하기 위해 나머지를 강제로 특히, 성능이 향상됩니다.

+0

안녕하세요, 마이크,이 함수는 이미 비활성화되어 있습니다. 셀에 삽입 된 후 수식을 업데이트하는 것과 더 관련이 있습니다. 자동 완성을 사용하면 함수가 추가되지만 위 셀의 값은 한 번 업데이트해야합니다. 그 수식은 세포 안에 있습니다. – Lowpar

+0

삽입 할 데이터와 수식의 예를 보여줄 수 있습니까? – Mike

+0

필요한 것을 제공하는 다른 방법이있을 수 있습니다. 또는 아래에서 위로 범위를 채우려고 시도 했습니까? (계산이 꺼져 있지만 확인하기에 흥미가 있다면 차이를 두어서는 안됩니다.) – Mike