2016-06-16 3 views
0

효율성 문제 만 있습니다. 필자는 기본적으로 열에있는 셀을 반복하여 특정 문자열이 포함되어 있는지 확인하지만, 그 셀에는 14 개의 다른 문자열이 포함될 필요가 없습니다. 내 현재 솔루션은 문자열을 찾은 다음 셀의 instr을 사용하여 배열을 반복합니다. 그러나 이것은 매크로가 실행 중일 때 수백 번 발생할 수 있습니다. 더 좋은 방법이 있다면 나는 궁금하다. 예를 들어VBA - 배열의 모든 값에 대한 문자열 검색

:

NotArr = Array("blah1", "blah2", "blah3", "etc") 

For r = 1 to 10 
    'Let's assume I've already found the first string 
    For i = 1 to 4 
     If Not InStr(Cells(r, 1).value, NotArr(i)) > 0 Then 
      'Do things 
     End If 
    Next i 
Next r 

참고 : 나는 아마 지나친하거나 명백한 누락 알고있다. 나는 VBA에 약 6 주 @ 10 시간 동안 묻혀 있었고 내 뇌가 녹는 것을 느낄 수 있었다.

감사합니다.

+1

배열에 범위를 넣으면 더 빠르게 만들 수 있으므로 시트에 여러 번 돌아 가지 않습니다. 또는 적어도 각 셀의 값을 변수에 넣고 테스트하면 시트에서 셀을 참조하는 횟수를 줄일 수 있습니다. –

+0

워크 시트와 상호 작용 (매크로에서'Cells() '을 여러 번 사용)하면 매크로가 느려집니다. 검색 할 범위를 배열에 저장 한 다음 매크로의 배열을 사용하여 속도를 높일 수 있습니다. 수동 모드에서 계산을 유지하고 화면 업데이트를 끄는 것과 같은 기본적인 것들. –

+0

감사합니다. 도움이됩니다. 이미 더 빨라졌습니다! –

답변

1

VBA가 Excel 범위와 수백 번 상호 작용해야하는 셀을 반복하는 대신 배열에 먼저 데이터를 저장해보십시오. 이렇게하면 일이 상당히 빠르게 진행됩니다.

Dim arr() as Variant 
arr = Range("A1:G10") 
For each rng in arr 
    For i = 1 to 4 
     If Not InStr(rng.value, NotArr(i)) > 0 Then 
      'Do things 
     End If 
    Next i 
Next 
관련 문제