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 열에 있는 이름이 몇 개 인지 알려줍니다.
▼ 다음은 위에서 만든 소스에다 [이름 입력]칸에 찾고 싶은 이름을 입력하고 찾기를 누르면 몇 번째 셀에 있는 찾을 수 있도록 소스를 추가해 보겠습니다. 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 입력된 값 형식 확인 Information 관련 함수 모음 |
댓글을 달아 주세요
이우진 2017.07.30 18:16 댓글주소 수정/삭제 댓글쓰기
findName
변수가 정의되지 않는다고.....
똑같이 복사해서 해봤는데도,,
어찌해야 할지...
lwj4you@gmail.com
제가 함수 상단에 정의를 안했군요.
Dim findName AS String 을 입력해 주세요. 또는 편집 화면 제일 상단에 있는 Option Explicit 코드를 없애 줍니다.
망소 2017.09.12 15:00 댓글주소 수정/삭제 댓글쓰기
검색 결과가 두개이면 끝에 것만 검색이 되는데 이는 어떻게 해결하나요 ~?
Do Loop 안에서 결과값을 나타내는 텍스트를 조합하면 되겠죠. searchCount 를 숫자가 아닌 텍스트를 저장할 수 있도록 String 으로 변경한 뒤 "10번째, 11번째" 같이 텍스트를 조합해 보세요.
ㅇㄻ 2017.12.04 17:14 댓글주소 수정/삭제 댓글쓰기
시트에 똑같은 이름이 몇개 잇는지 확인할수있는 함수도 알려주세요...
If InStr(name, findName) > 0 Then
searchCount = row
count = count + 1
End If
분기안에 count 변수를 넣고 메시지 출력할 때 보여주면 됩니다.
안녕하세요 엑셀 지식인에 질문을 올려놨는데...2일째 이것저것 손대보고는 있지만
에러만 뜨네요...함수로는 무리가 있는건가요?
매크로는 도통 손댈줄을 모르는데...
홈페이지에 올려둔 이 파일의 경우 코딩을 어떻게 하면되나요,,,? ㅠㅠ