Please Enable JavaScript!
Gon[ Enable JavaScript ]

엑셀 VBA 셀 데이터 검색해서 찾기

엑셀(Excel)/VBA
반응형

VBA 를 이용해서 엑셀 데이터 중 원하는 값을 찾아 몇 번 줄에 있는지 알려 주는 코드를 만들어 보겠습니다. 시트에서 실행은 양식 컨트롤의 버튼을 이용할 것입니다. 소스는 버튼을 클릭하면 지정한 매크로를 실행해서 찾는 내용이 몇 번 행에 있는지 팝업창으로 알려줄 것입니다.  

 

 

프로그램에 쓰이는 컨트롤 목록은 [개발 도구] 탭에 있습니다. 컨트롤 그룹의 삽입 리본 메뉴를 선택하시면 양식 컨트롤에 [버튼] 을 볼 수 있습니다.

엑셀 VBA 셀에 있는 데이터 검색해서 찾는 방법

 

버튼을 클릭해서 엑셀 시트에 추가하면 [매크로 지정] 팝업창이 뜨게 됩니다. 매크로 지정 팝업창에서 매크로 이름을 넣고 [새로 만들기]를 클릭합니다.

엑셀 VBA 셀에 있는 데이터 검색해서 찾는 방법

아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다. ※
엑셀 VBA 다른 셀에 일치하는 코드 값에 데이터 찾아 추가하기
엑셀 VBA 마지막 행과 열의 수 찾기
엑셀 VBA 시트에서 데이터 셀 영역 구하기
엑셀 VBA – 매크로 이용해서 특정 조건의 데이터를 삭제하고 싶을 때
엑셀 VBA 입력된 값 형식 확인 Information 관련 함수 모음

 

 

 

매크로 지정 팝업창에서 [새로 만들기] 버튼을 클릭하면 VBA 에디터에 매크로 이름에 해당하는 함수가 자동으로 생깁니다. 먼저 함수 내에서 데이터가 들어가 있는 셀이 몇 개 인지 체크하는 소스를 만듭니다. 셀을 내용을 하나씩 체크하기 위해 Do ... Loop Until 반복문을 사용하였고 마지막에 값이 없을 때 까지 반복한 후 몇 개가 있는지 메시지 박스로 알려줍니다.

Sub SearchName()
   
    Dim row As Integer
    Dim name As String
   
    row = 0
   
    Do
    DoEvents
        row = row + 1
        name = ActiveSheet.UsedRange.Range("A" & row)
    Loop Until name = ""
       
    MsgBox row - 1
End Sub

 

 

아래 그림처럼 [찾기] 버튼을 클릭해서 SearchName() 함수를 실행하면 A 열에 있는 이름이 몇 개 인지 알려줍니다.

엑셀 VBA 셀에 있는 데이터 검색해서 찾는 방법

 

다음은 위에서 만든 소스에다 [이름 입력]칸에 찾고 싶은 이름을 입력하고 찾기를 누르면 몇 번째 셀에 있는 찾을 수 있도록 소스를 추가해 보겠습니다. Do Loop Until 반복문을 돌면서 입력한 이름값인 “C2” 와 각 셀의 값을 비교해서 해당하는 값이 맞다면 몇 번째인지 searchCount 변수에 저장합니다. 이 값이 찾고자 하는 이름이 있는 행 값입니다. InStr() 함수는 두 번째 인수로 들어간 findName 값이 있으면 1 이상을 리턴하게 됩니다.

Sub SearchName()
   
    Dim row, searchCount As Integer
    Dim name As String
   
    row = 0
    searchCount = 0
    findName = ActiveSheet.UsedRange.Range("C2")
   
    If findName = "" Then
        MsgBox "찾을 이름을 입력해 주세요!!"        Exit Sub
    End If
   
    Do
    DoEvents
   
        row = row + 1
        name = ActiveSheet.UsedRange.Range("A" & row)
        If InStr(name, findName) > 0 Then
            searchCount = row
        End If
       
    Loop Until name = ""
       
    MsgBox findName & " 는 " & searchCount & " 번째 셀에 있습니다."
    
End Sub

 

 

아래 그림처럼 찾을 이름을 입력하고 [찾기] 버튼을 누르시면 몇 번째 행에 이름이 있는지 알려 주게 됩니다.

엑셀 VBA 셀에 있는 데이터 검색해서 찾는 방법

 

아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다. ※
엑셀 VBA 다른 셀에 일치하는 코드 값에 데이터 찾아 추가하기
엑셀 VBA 마지막 행과 열의 수 찾기
엑셀 VBA 시트에서 데이터 셀 영역 구하기
엑셀 VBA – 매크로 이용해서 특정 조건의 데이터를 삭제하고 싶을 때
엑셀 VBA 입력된 값 형식 확인 Information 관련 함수 모음
반응형
Posted by 녹두장군

댓글을 달아 주세요

  1. 이우진 2017.07.30 18:16  댓글주소  수정/삭제  댓글쓰기

    findName
    변수가 정의되지 않는다고.....
    똑같이 복사해서 해봤는데도,,
    어찌해야 할지...

    lwj4you@gmail.com

    • Favicon of https://mainia.tistory.com 녹두장군 2017.07.30 20:19 신고  댓글주소  수정/삭제

      제가 함수 상단에 정의를 안했군요.
      Dim findName AS String 을 입력해 주세요. 또는 편집 화면 제일 상단에 있는 Option Explicit 코드를 없애 줍니다.

  2. 망소 2017.09.12 15:00  댓글주소  수정/삭제  댓글쓰기

    검색 결과가 두개이면 끝에 것만 검색이 되는데 이는 어떻게 해결하나요 ~?

    • Favicon of https://mainia.tistory.com 녹두장군 2017.09.12 18:31 신고  댓글주소  수정/삭제

      Do Loop 안에서 결과값을 나타내는 텍스트를 조합하면 되겠죠. searchCount 를 숫자가 아닌 텍스트를 저장할 수 있도록 String 으로 변경한 뒤 "10번째, 11번째" 같이 텍스트를 조합해 보세요.

  3. ㅇㄻ 2017.12.04 17:14  댓글주소  수정/삭제  댓글쓰기

    시트에 똑같은 이름이 몇개 잇는지 확인할수있는 함수도 알려주세요...

  4. Favicon of https://kin.naver.com/qna/detail.naver?d1id=1&dirId=102020101&docId=396443227 엑셀초짜 2021.08.05 15:36  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 엑셀 지식인에 질문을 올려놨는데...2일째 이것저것 손대보고는 있지만
    에러만 뜨네요...함수로는 무리가 있는건가요?
    매크로는 도통 손댈줄을 모르는데...
    홈페이지에 올려둔 이 파일의 경우 코딩을 어떻게 하면되나요,,,? ㅠㅠ