2017-10-30 5 views
0

친구,더 빠르게 실행되도록 VBA 코드 최적화

아래 코드를 사용하여 매트릭스에 변수 x, y (경도 및 위도)의 두 배열을 사용하여 결과를 계산합니다. 수식이 복잡하기 때문에 모든 결과를 얻는 데 오랜 시간이 걸립니다. 누구든지 코드를 최적화하여 실행 속도를 향상시킬 수 있습니까? 고맙습니다!

두 개의 탭, VBA 계산 시트 및 시트 2 사이에서 코드가 실행됩니다. 첫 번째 배열은 셀 A3에서 시작하고 두 번째 배열은 셀 B1에서 시작됩니다.

Sub calculator() 
Worksheets("Sheet2").Select 

Dim long1 As Double 
Dim lat1 As Double 


Application.ScreenUpdating = False 
x = 3 
y = 2 
While IsEmpty(Cells(x, 1)) = False 

lat1 = Cells(x, 1).value 



While IsEmpty(Cells(1, y)) = False 

long1 = Cells(1, y).value 

Worksheets("VBA Calculation Sheet").Select 
Cells(28, 7) = lat1 
Cells(29, 7) = long1 

index = Cells(23, 7).value 


Worksheets("Sheet2").Select 

Cells(x, y) = index 

y = y + 1 
Wend 

x = x + 1 
y = 2 

Wend 

End Sub 
+5

코드가 작동하면 https://codereview.stackexchange.com/에이 제목을 게시하고이 제목을 게시해야합니다.이 포럼에는 너무 광범위하지만 그 중 하나에 적합합니다. –

+1

배열 작업에 대해 읽어 보았습니다. 코드가 워크 시트와 계속 상호 작용하기 때문에 코드가 느립니다. 배열에 데이터를 저장하고 메모리 내에서 코드 내에서 처리하는 것이 좋습니다. 그런 다음 필요한 경우 최종 결과를 워크 시트에 출력합니다. – Calico

+0

또한 시트에서 계산을 수행하고 싶을 것입니다. 작업 속도를 높이려면 시트를 참조해야하는 횟수를 제한해야합니다. 하나는 배열을로드하고 해당 배열을 반복하여 코드에서 계산을 수행하고 출력을 위해 다른 배열을로드해야합니다. 그렇게하면 워크 시트를 2 ~ 3 번만 액세스 할 수 있습니다. 이것은'.Select'를 사용하는 것뿐만 아니라 주된 느려짐입니다. –

답변

0

.Select은 많은 자원을 소비합니다. 코드를 실행하는 더 좋은 방법은 배열을 사용하는 것입니다. 메모리 소비를 줄이려면 Variant과 다른 배열 유형을 정의하십시오.

+0

답변보다 더 많은 코멘트입니다. –

+0

아, 알았어요! 순전히 배열로 바꿔 주셔서 감사합니다. – menhadon