[VBA 제 46강] Find매서드에 대하여 썸네일 이미지
[VBA 제 46강] Find매서드에 대하여
콘텐츠 타입 MS 오피스 엑셀 2003(2007, 2010가능), Windows XP 이상
용량0KB
조회1,276
즐겨찾기
[VBA 제 46강] Find매서드에 대하여를 즐겨찾기 한 횟수는 0 0입니다.
이용등급 유료 (회원권 or 단품 구매)
제품 상세정보

 

 

 




[ 기초 강좌 ]

 

제 46강

Find매서드에 대하여

 

Find매서드에 대해 알아봅니다.

이럴 때 필요해요

엄청난 양들의 데이터들중에서 원하는 데이터의 개수를 빨리찾고싶을때 유용하게사용됩니다.

이렇게 사용해요

 이번 시간에는 데이터(셀)에 보다 빨리 접근하는 방법에 대해 알아 보도록 하겠습니다.

현실 세계에서 낯선 찾아가려면 지도나 주소가 있어야 하듯이 컴퓨터도 마찬가지입니다.

워크시트의 모든 셀에도 셀 주소가 있듯이 컴퓨터의 메모리에도 주소가 있고 하드디스크에도 수없이 많은

주소가 있습니다.

해서, 컴퓨터는 주소를 찾아 다니다가 시간을 다 보내는 물건이라고 해도 과언이 아닐 듯 합니다. ^^

따라서 데이터를 가공/분석/출력을 하려면 우선, 데이터가 어디에 들어 있는 지를 알아야 그 다음 작업을해도 하겠지요? 

즉, 서울에서 광주까지 가는 방법은 수도 없이 많듯이 프로그래밍을 할 때에도 마찬가지입니다.

 

수만가지의 숫자가 적혀있는 데이터표 사이에서 원하는 숫자 갯수를 세워볼겁니다.

 

아래의 B31 셀에 10~99 사이의 적당한 숫자(예: 35, 77, 93… 등)를 입력한 다음,

ForEach_Next 버튼과 Find_FindNext 버튼을 각각 눌러, 수행 속도를 비교해 보겠습니다.

 

 

[VBA 제 46강] Find매서드에 대하여
 

[VBA 제 46강] Find매서드에 대하여
 

 

현재는 데이터의 량이 그다지 많지 않아 큰 차이를 보이지 않습니다만, 검색할 데이터의 양이 많으면

많을수록 그 격차는 더욱 벌어 집니다.

그럼, 코드를 살펴 보도록 하지요.

먼저, 'ForEach_Next' 버튼에 연결된 코드부터 볼까요?

 

 

 

Sub ForEach_NextAccess()

   Dim rngCell As Range, rngSource As Range

   Dim i As Integer, intWhatNum As Integer

    '''먼저, 필요한 등장 인물(변수)들을 선언합니다.

    Set rngSource = [Source]

    rngSource.Interior.ColorIndex = xlNone

      intWhatNum = [Target]

    '''데이터가 들어 있는 부분에 미리 Source라는 이름을 붙여 두었습니다.

    '''워크시트에 이름을 정의해 두면 프로그래밍시 접근하기가 훨씬 용이합니다.

    '''데이터가 있는 영역, 즉 rngSource 의 배경색을 지운 다음, 변수 intWhatNum 의

    '''값이 Target 이라는 이름으로 정의된 셀, 즉 B31 셀에 입력된 값으로 정의합니다.

    If intWhatNumber > 99 Or intWhatNumber < 10 Then

        MsgBox "유효하지 않은 값입니다!", vbCritical, " //입력 오류"

        Exit Sub

    End If

    ''' 변수 intWhatNumber의 값이 10~99 사이의 값만 유효한 것으로 설정합니다.

    For Each rngCell In rngSource

        If rngCell = intWhatNumber Then

             rngCell.Interior.ColorIndex = 38

            i = i + 1

        End If

        '''만약에 Find라는 메서드(방법)가 없었다면, 위와 같이 순환문을 신나게(?) 돌려야만

        '''합니다. 그렇기 때문에 수행 속도도 떨어 지게 되는 것이지요.

    Next rngCell

   [Target].Select

    MsgBox "모두 " & i & "개의 셀이 발견되었습니다.  ", vbInformation, "// 작업 완료"

End Sub

이 코드를 아래의 ' Find_FindNext' 코드와 비교해 보세요.

Sub Find_FindNextAccess()

    Dim rngCell As Range, rngSource As Range

    Dim i As Integer, intWhatNum As Integer

    Dim strAddress As String

    Set rngSource = [Source]

    rngSource.Interior.ColorIndex = xlNone

            intWhatNum = [Target]

    If intWhatNumber > 99 Or intWhatNumber < 10 Then

        MsgBox "유효하지 않은 값입니다!", vbCritical, " // 입력 오류"

        Exit Sub

    End If

    '''변수를 선언하고, 사용자로 부터 데이터를 받은 다음, 유효한 지 여부를 판단하는

    '''과정은 위의 'ForEach_Next'의 버튼에 연결된 코드와 같습니다.

    Set rngCell = rngSource.Find(intWhatNumber)

    '''여기서부터 차이가 있습니다. 먼저 Find 메서드를 사용하여 검색 대상 영역 중에서

    '''사용자가 입력한 데이터가 있는지를 파악합니다.

      If Not rngCell Is Nothing Then

        strAddress = rngCell.Address

        '''Not rngCell Is Nothing 이라는 것은 해당되는 데이터가 있다는 의미이지요?

        '''즉, 사용자로부터 입력받은 데이터와 같은 것이 있을 경우, 아래로 내려가서

        '''Do~Loop 문을 수행하게 됩니다.

        '''여기서 한 가지 주의할 점!

        '''Find 또는 FindNext 메서드는 해당 셀의 값이 아닌 Range 오브젝트를 돌려 준다는

        '''사실입니다. 따라서 Range 오브젝트 변수의 값을 strAddress 라는 문자열 변수에

        '''담아 두었습니다.

        Do

            Set rngCell = Columns(1).FindNext(after:=rngCell)

            rngCell.Interior.ColorIndex = 4

            i = i + 1

            '''같은 데이터가 계속 있을 경우, FindNext 메서드를 사용하여 계속 검색을

            '''진행 합니다. 언제까지 하느냐 하면, rngCell의 주소가 strAddress의 값과

            '''다를 때까지, 그러니까 같은 값이 없을 때 Do~Loop 문을 탈출하게 됩니다.

        Loop While rngCell.Address <> strAddress

    End If

       [Target].Select

      MsgBox "모두 " & i & "개의 셀이 발견되었습니다.  ", vbInformation, "// 작업 완료"

End Sub

     보신 바와 같이, 어떤 도구를 사용하느냐에 따라 많은 차이가 있습니다.

Find 또는 FindNext 라는 훌륭한 도구가 있는데, 그걸 몰라서 오로지 For Each~Next 나

For~Next 하고만 친하게 지내다 보면 그만큼 경쟁력이 떨어 지게 되는 것이지요.

// 많이들 연구해 보시기 바라며, 그럼 오늘도 여기까지!!


저작권정보
1. 콘텐츠의 저작권은 쿠키(www.coukey.co.kr)에 있으며, 사용권한은 1인 1카피입니다.
2. 다운로드 받은 콘텐츠는 본인(본인회사)만 사용할 수 있습니다.
3. 다른 사람과 공유하거나 원본 또는 수정 후 무단전제,무단배포,무단판매,무단 공유할 수 없습니다.
4. 웹상에서 배포는 상업,비상업적 목적을 불문하고, 손해배상등 가중처벌됩니다.
[VBA 제 46강] Find매서드에 대하여
이용후기

업무자동화 맞춤제작

고객님의 상황에 100% 맞춘 콘텐츠 제작 전문 서비스를 이용해 보세요.
프리미엄 무료 이벤트 중