스크립트 섹션에 루프가 있으며 매우 느리게 실행됩니다. 이 문제를 개선하기위한 조언을 받기를 희망했습니다.VBA 2010 : 루프 속도를 높이는 코딩 방법에 대한 조언
데이터 쌍이 8 쌍 있습니다. 각 쌍은 Array (1 차원 및 일반적으로 400 개의 문자열 요소)와 일반적으로 약 2,000 개의 문자열 요소가있는 열로 구성됩니다. 데이터 세트의 각 쌍 내에서 배열의 각 요소를 열의 각 요소와 대조하여 일치 항목을 확인하려고합니다.
For i = 1 to 8
For j = 0 to 400
For k = 0 to 2000
If Cells(k,i) = myArray[1, then 2, then 3, etc.](j) then [action]
next K
next j
next i
나는 A의 첫번째 2000 세포에게 칼럼을 통해 400 번, 다음 열 B의 첫 번째 2000 개 세포를 400 배 등을 반복하고있어, 위를 수행하여 여기 내 접근 방식의 단순화 된 버전입니다. 이것은 매우 불필요하게 보이며 약 6 백 4 십만 개의 세포가 검사됩니다. 영원히 걸립니다. 나는 이것을 할 수있는 더 좋은 방법이 있고, 누군가가 나를 계몽하기를 바라고 있습니다.
필요한 경우 실제 코드를 보여주고 그 코드가 수행하는 모든 작업을 설명 할 수 있지만 다소 시간이 오래 걸립니다.
편집 : 여기 실제 코드가 있습니다. 그것은 또한 자격이있는 부울이있는 속을 찾고 있습니다. 이러한 조건이 충족되면 관련된 정수 값과 행 번호를 사용합니다. 모든 정수 값을 합하고 그 정수를 그 합으로 바꿉니다. 이 작업은 모든 고유 한 이름에 대해 수행 한 다음 (표시되지 않음) 나머지 7 개의 데이터 세트에 대해이 작업을 반복합니다.
For i = 0 To j - 1 'starts with the first unique element and searches for dupes...
v = 0 'initial qty value
r = 0 'initial number of rows with dupes
For k = 2 To WULastRow 'go though each cell in the first column
If Cells(k, colPair + 2) = True And Cells(k, colPair).Text = uniqueNames(i) Then '...if one is found and the row's boolean is true...
v = v + Cells(k, colPair + 1).Value '...sum it's qty with previous dupes qty's...
r = r + 1 'increment number of dupes found
ReDim Preserve rngMatch(r - 1) 'increase the size of the array that will hold the row numbers of the dupes.
rngMatch(r - 1) = k '...and input dupe's row number to said array.
End If
Next k
k = 0
'if 1 or more duplicate is found for the given unique item name is found...
If r > 1 Then
k = 0
For k = 0 To r - 1
Cells(rngMatch(k), colPair + 1).Value = v '...input the summed quantity in their qty cells...
Next k
End If
Next i 'then regardless, move on to the name unique name and repeat this process.
[동작]은 무엇인가요? –
[조치]가 조금 관련되어 있습니다. 나열된 간단한 코드를 조금 지나치면 2000 개의 이름의 각 열 A와 함께 2000 개의 정수 B 열과 2000 개의 부울 C 열이 나옵니다. A 열에서 중복이 발견되고 해당 행의 부울이 참인 경우, [action]은 B 열의 정수를 가져 와서이 고유 배열 항목의 다른 모든 정수와 합산합니다. dupe가 C 열에 "true"와 함께 발견 된 경우 해당 추가에 관련된 각 정수를 결과 합계로 바꿉니다. 그게 도움이 되니? – AnthonyJS
_ _ "관련된 각 정수를 바꿉니다"_는 루프의 크기가 아니라 시간을 의미합니다. –