엑셀 검색 기능 만드는 방법(매크로)
엑셀에 작성한 표에서 특정 단어가 포함된 행만 보고 싶다면 필터에서 검색을 하면 된다.
하지만 원본 데이터는 그대로 두고 다른 셀이나 시트 등에서 결과를 보고 싶다면 검색 기능 자체를 만들어야 하는데 구버전 엑셀에서는 함수로 검색 기능을 만드는 것에는 한계가 있기 때문에 매크로를 사용해서 만드는 것이 가장 깔끔하지 않을까 한다.
엑셀의 검색 기능 만들기
1. 텍스트 상자 넣기.
흔히 생각하는 검색창을 떠올린다면 텍스트 상자를 사용하는 것이 가장 무난하지 않을까 한다.
텍스트 상자는 엑셀 상단의 리본 메뉴에서 [개발 도구 -> 삽입 -> 텍스트 상자]를 클릭하여 원하는 위치에 넣으면 된다.
※. 상단의 리본 메뉴에 개발 도구 탭이 보이지 않는다면 아래의 글을 참고하여 옵션에서 메뉴를 추가하자.
2. 매크로 코드 입력.
텍스트 상자를 더블 클릭하여 VBA 매크로 창이 열릴 것이다.
그다음 아래의 코드에서 빨간색으로 표시한 부분을 사용자에 맞게 수정하고 붙여넣자.
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Dim wsSearch As Worksheet Dim wsOutput As Worksheet Dim searchTerm As String Dim searchRange As Range Dim outputRange As Range Dim dataRange As Range Dim cell As Range Dim outputRow As Long Dim clearRange As Range ' 엔터 키가 눌렸을 때만 실행 If KeyCode <> vbKeyReturn Then Exit Sub ' 검색 시트와 출력 시트 설정 Set wsSearch = ThisWorkbook.Sheets(1) ' 검색을 시작할 시트 Set wsOutput = ThisWorkbook.Sheets(1) ' 결과를 출력할 시트 ' 범위 설정 Set searchRange = wsSearch.Range("A1:A10") ' 검색 범위 Set dataRange = wsSearch.Range("A1:B10") ' 데이터를 포함하는 범위 Set outputRange = wsOutput.Range("D4") ' 출력 시작 위치 ' 텍스트 박스 값 가져오기 searchTerm = Me.TextBox1.Text If searchTerm = "" Then MsgBox "검색어를 입력하세요.", vbExclamation Exit Sub End If ' 출력 범위 초기화 Set clearRange = wsOutput.Range(outputRange, wsOutput.Cells(outputRange.Row + dataRange.Rows.Count - 1, outputRange.Column + dataRange.Columns.Count - 1)) clearRange.ClearContents ' 조건에 맞는 데이터를 출력 outputRow = outputRange.Row For Each cell In searchRange If InStr(1, cell.Value, searchTerm, vbTextCompare) > 0 Then dataRange.Rows(cell.Row - searchRange.Row + 1).Copy wsOutput.Cells(outputRow, outputRange.Column).PasteSpecial Paste:=xlPasteValues outputRow = outputRow + 1 End If Next cell ' 클립보드 정리 Application.CutCopyMode = False ' 완료 메시지 'MsgBox "필터링 완료!", vbInformation End Sub |
3. 검색 기능 확인.
코드를 붙여 넣었다면 이제 검색이 잘 되는지 확인해 보자.
[개발 도구 -> 디자인 모드]를 클릭하여 디자인 모드를 비활성화 한 뒤 텍스트 상자를 클릭하고 검색을 하면 된다.
(텍스트 상자를 클릭할 때 상자 자체가 선택된다면 디자인 모드가 활성화되어 있어서 그런 것이다)
그 외 내용
- 매크로를 사용하는 방법이기 때문에 구버전이든 최신 버전이든 엑셀의 버전에 상관모두 사용이 가능하다는 장점이 있다.
다만 매크로라는 것 하나만으로도 뭔가 거부감이 들거나 불편한 사람도 있을 텐데 최신 버전의 엑셀이라면 매크로 대신 FILTER 함수로 검색 기능을 만들 수 있으니 이를 사용하는 것이 더 간단하고 좋을지도 모르겠다.
- FILTER 함수로 검색 기능을 만드는 방법은 아래와 같은 수식을 사용하기만 하면 된다.
=filter(데이터를 포함한 범위,ISNUMBER(SEARCH(검색어,검색 범위))) =filter(A1:B10,ISNUMBER(SEARCH(D2,A1:A10))) |