엑셀 VBA의 Range.Find 메서드는 특정 값을 포함한 셀을 찾을 때 사용하는 기능입니다.
Find를 사용하면 특정 값이 있는 첫 번째 셀을 검색할 수 있으며, 반복문을 활용하면 여러 개의 셀을 찾을 수도 있습니다.
1. 기본 문법
Range(검색할 범위).Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)
|
- What: 찾을 값 (필수)
- After: 검색 시작 위치 (기본값: 첫 번째 셀)
- LookIn: 검색할 대상 (xlValues, xlFormulas, xlComments)
- LookAt: 정확한 일치 여부 (xlWhole, xlPart)
- SearchOrder: 검색 방향 (xlByRows, xlByColumns)
- SearchDirection: 검색 방향 (xlNext, xlPrevious)
- MatchCase: 대소문자 구분 여부 (True = 대소문자 구분)
- MatchByte: 한/영 구분 여부 (True = 한글과 영문 구분)
- SearchFormat: 서식 검색 여부 (True = 서식 포함 검색)
2. 기본 예제
📌 특정 값 찾기
Sub 값_찾기()
Dim rng As Range
Set rng = Range("A1:A10").Find(What:="Apple") ' "Apple" 찾기
If Not rng Is Nothing Then
MsgBox "Apple을 찾았습니다! 위치: " & rng.Address
Else
MsgBox "Apple을 찾을 수 없습니다."
End If
End Sub
|
📌 "Apple"이라는 값을 포함한 첫 번째 셀을 찾아서 셀 주소를 메시지 박스로 표시합니다.
3. LookAt 옵션 (완전 일치 vs 부분 일치)
✅ xlWhole (완전 일치)
Sub 값_찾기()
Dim rng As Range
Set rng = Range("A1:A10").Find(What:="Apple") ' "Apple" 찾기
If Not rng Is Nothing Then
MsgBox "Apple을 찾았습니다! 위치: " & rng.Address
Else
MsgBox "Apple을 찾을 수 없습니다."
End If
End Sub
|
✅ xlPart (부분 일치)
Set rng = Range("A1:A10").Find(What:="Apple", LookAt:=xlPart)
|
- "Apple Pie", "Green Apple" 등 Apple을 포함한 모든 값 검색
4. 반복문을 활용하여 모든 값 찾기
Find는 첫 번째 값만 찾기 때문에 Do While 반복문을 활용하여 여러 개의 셀을 찾는 것이 가능합니다.
📌 특정 값을 포함한 모든 셀 찾기
Sub 모든_값_찾기()
Dim rng As Range
Dim firstAddress As String
' 첫 번째 "Apple"을 찾음
Set rng = Range("A1:A10").Find(What:="Apple", LookAt:=xlWhole)
If Not rng Is Nothing Then
firstAddress = rng.Address ' 첫 번째 찾은 셀 주소 저장
Do
rng.Interior.Color = RGB(255, 255, 0) ' 노란색으로 강조
Set rng = Range("A1:A10").FindNext(rng) ' 다음 값 찾기
Loop While Not rng Is Nothing And rng.Address <> firstAddress ' 처음 찾은 셀로 돌아오기 전까지 반복
End If
End Sub
|
📌 "Apple"을 포함한 모든 셀을 노란색으로 강조합니다.
5. 찾을 값이 없는 경우 예외 처리
Sub 값_없음_처리()
Dim rng As Range
Set rng = Range("A1:A10").Find(What:="Orange") ' 없는 값 찾기
If rng Is Nothing Then
MsgBox "찾을 수 없습니다."
Else
MsgBox "Orange가 위치한 셀: " & rng.Address
End If
End Sub
|
📌 "Orange"가 없을 경우 "찾을 수 없습니다." 메시지 출력
6. 대소문자 구분하여 검색 (MatchCase)
Set rng = Range("A1:A10").Find(What:="apple", MatchCase:=True)
|
📌 "apple"과 "Apple"을 다르게 인식
(기본값은 False, 즉 대소문자 구분 없음)
7. 행 우선 vs 열 우선 검색 (SearchOrder)
옵션
|
설명
|
xlByRows
|
행을 따라 검색 (기본값)
|
xlByColumns
|
열을 따라 검색
|
📌 행 기준으로 검색 (기본값)
Set rng = Range("A1:C10").Find(What:="Apple", SearchOrder:=xlByRows)
|
📌 A → B → C 순서로 검색
📌 열 기준으로 검색
Set rng = Range("A1:C10").Find(What:="Apple", SearchOrder:=xlByColumns)
|
📌 A1 → A2 → A3 순서로 검색
8. Find를 활용한 특정 데이터 수정
📌 "Apple"을 "Banana"로 변경
Sub 값_변경()
Dim rng As Range
Set rng = Range("A1:A10").Find(What:="Apple", LookAt:=xlWhole)
If Not rng Is Nothing Then
rng.Value = "Banana" ' 찾은 셀의 값 변경
Else
MsgBox "Apple을 찾을 수 없습니다."
End If
End Sub
|
9. 특정 서식을 가진 값 찾기
Find 메서드는 특정 서식(예: 빨간색 배경)으로 설정된 값을 찾을 수도 있습니다.
📌 빨간색 배경을 가진 셀 찾기
Sub 서식_검색()
Dim rng As Range
Dim searchFormat As Variant
' 빨간색 배경을 가진 셀 찾기
Set searchFormat = Application.FindFormat
searchFormat.Interior.Color = RGB(255, 0, 0) ' 빨간색 배경
Set rng = Range("A1:A10").Find(What:="*", SearchFormat:=True)
If Not rng Is Nothing Then
MsgBox "빨간색 배경의 셀 주소: " & rng.Address
Else
MsgBox "해당 서식을 가진 셀을 찾을 수 없습니다."
End If
End Sub
|
📌 SearchFormat:=True 옵션을 사용하면 서식이 적용된 셀을 찾을 수 있음
📝 정리
- Range("A1:A10").Find("값") → 특정 값 찾기
- LookAt:=xlWhole → 완전 일치, LookAt:=xlPart → 부분 일치
- FindNext와 Loop를 사용하면 여러 개의 셀 찾기 가능
- MatchCase:=True → 대소문자 구분
- SearchOrder:=xlByRows → 행 우선, SearchOrder:=xlByColumns → 열 우선
- SearchFormat:=True → 특정 서식(색상 등)으로 검색 가능
🔥 Find를 활용하면 엑셀 데이터를 빠르게 검색하고 자동화할 수 있습니다! 🚀