엑셀 VBA에서 InStr 함수는 문자열 내에서 특정 문자열(또는 문자)이 처음 나타나는 위치를 찾는 데 사용됩니다.
즉, 어떤 문자열이 포함되어 있는지 확인하거나, 문자열을 추출할 때 유용합니다.
1. 기본 문법
InStr([시작위치], 문자열, 찾을문자열, [비교방식])
|
- 시작위치 (선택 사항) → 검색을 시작할 위치 (기본값: 1)
- 문자열 → 검색할 원본 문자열
- 찾을문자열 → 찾고 싶은 문자 또는 문자열
- 비교방식 (선택 사항) → vbBinaryCompare (대소문자 구분) 또는 vbTextCompare (대소문자 무시)
2. 기본 예제
📌 문자열에서 특정 단어 위치 찾기
Sub InStr_기본()
Dim 위치 As Integer
위치 = InStr(1, "나는 VBA를 공부한다", "VBA")
MsgBox "VBA는 " & 위치 & "번째 위치에 있습니다."
End Sub
|
📌 "VBA"가 포함된 위치를 반환 (5번째 글자 위치)
📌 "나는 VBA를 공부한다" → 결과: 5
📌 없으면 0 반환
Sub InStr_없는_경우()
Dim 위치 As Integer
위치 = InStr(1, "나는 VBA를 공부한다", "Python")
MsgBox "결과: " & 위치
End Sub
|
📌 "Python"이 없으므로 0 반환
3. 대소문자 구분 여부
📌 기본적으로 대소문자 구분 (vbBinaryCompare, 기본값)
Sub InStr_대소문자_구분()
Dim 위치 As Integer
위치 = InStr(1, "나는 VBA를 공부한다", "vba", vbBinaryCompare)
MsgBox "결과: " & 위치
End Sub
|
📌 "vba"와 "VBA"는 다르므로 결과는 0
📌 대소문자 무시 (vbTextCompare)
Sub InStr_대소문자_무시()
Dim 위치 As Integer
위치 = InStr(1, "나는 VBA를 공부한다", "vba", vbTextCompare)
MsgBox "결과: " & 위치
End Sub
|
📌 "VBA"와 "vba"를 동일하게 인식 → 결과: 5
4. 검색 시작 위치 변경
📌 두 번째 "VBA" 찾기
Sub 두번째_VBA_찾기()
Dim 위치1 As Integer, 위치2 As Integer
위치1 = InStr(1, "VBA는 강력하다. VBA를 배워보자.", "VBA")
위치2 = InStr(위치1 + 1, "VBA는 강력하다. VBA를 배워보자.", "VBA")
MsgBox "첫 번째 위치: " & 위치1 & vbNewLine & "두 번째 위치: " & 위치2
End Sub
|
📌 첫 번째 "VBA" 위치: 1, 두 번째 "VBA" 위치: 11
5. 문자 찾기
📌 특정 문자 위치 찾기
Sub 문자_찾기()
Dim 위치 As Integer
위치 = InStr(1, "엑셀 VBA는 쉽다", "V")
MsgBox "V의 위치: " & 위치
End Sub
|
📌 "V"는 "엑셀 VBA는 쉽다"에서 4번째 글자 → 결과: 4
6. 문자열 내 특정 문자 개수 세기
Sub 특정문자_개수()
Dim str As String, 찾기 As String
Dim 위치 As Integer, 개수 As Integer
str = "사과, 바나나, 포도, 사과, 오렌지"
찾기 = "사과"
위치 = InStr(1, str, 찾기)
Do While 위치 > 0
개수 = 개수 + 1
위치 = InStr(위치 + 1, str, 찾기)
Loop
MsgBox 찾기 & "의 개수: " & 개수
End Sub
|
📌 "사과"의 개수를 세어 출력 (결과: 2)
7. 문자열에서 특정 부분 추출
📌 특정 문자 이후 문자열 가져오기
Sub 특정문자_이후_추출()
Dim str As String, 결과 As String
Dim 위치 As Integer
str = "이메일: example@gmail.com"
위치 = InStr(1, str, ": ") + 2
결과 = Mid(str, 위치)
MsgBox "이메일 주소: " & 결과
End Sub
|
📌 ":" 이후 텍스트 추출 → "example@gmail.com"
📌 이메일 아이디만 추출
Sub 이메일_아이디_추출()
Dim 이메일 As String, 위치 As Integer, 아이디 As String
이메일 = "example@gmail.com"
위치 = InStr(1, 이메일, "@")
아이디 = Left(이메일, 위치 - 1)
MsgBox "이메일 아이디: " & 아이디
End Sub
|
📌 "@" 앞 부분 (example)만 가져오기
8. InStrRev - 문자열을 뒤에서 검색
Sub InStrRev_사용()
Dim 위치 As Integer
위치 = InStrRev("C:\Users\하임\Desktop\파일.xlsx", "\")
MsgBox "마지막 '\' 위치: " & 위치
End Sub
|
📌 파일 경로에서 마지막 \ 위치 찾기 (경로에서 파일명만 가져올 때 유용)
📝 정리
기능
|
VBA 코드
|
문자열 내 특정 단어 위치 찾기
|
InStr(1, "문자열", "찾을문자")
|
없으면 0 반환
|
If InStr(1, "문자열", "없음") = 0 Then
|
대소문자 구분 검색
|
InStr(1, "문자열", "찾을문자", vbBinaryCompare)
|
대소문자 무시 검색
|
InStr(1, "문자열", "찾을문자", vbTextCompare)
|
두 번째 등장 위치 찾기
|
InStr(InStr(1, "문자열", "찾을문자") + 1, "문자열", "찾을문자")
|
특정 문자 개수 세기
|
Do While InStr(위치, "문자열", "찾을문자") > 0
|
특정 문자 이후 문자열 가져오기
|
Mid(문자열, InStr(1, 문자열, "구분자") + 1)
|
특정 문자 앞 부분 추출
|
Left(문자열, InStr(1, 문자열, "구분자") - 1)
|
뒤에서 검색 (InStrRev)
|
InStrRev("문자열", "찾을문자")
|
🔥 VBA의 InStr를 활용하면 문자열을 빠르고 효과적으로 검색할 수 있습니다! 🚀