엑셀 문자 추출 함수 :: ExtractLetter 사용법 총정리
문자 추출 함수, 목차 바로가기
인수 설명
인수 | 설명 |
텍스트 | 문자만 추출할 값이 적힌 셀 또는 문자열입니다. |
시작지점 [선택인수] |
문자 추출을 시작할 시작위치입니다. 기본값은 '1' 입니다. '5'를 입력할 경우, 5번째 글자부터 문자를 추출합니다. |
종료지점 [선택인수] |
문자 추출을 종료할 지점입니다. 기본값은 엑셀 셀안의 최대 글자수인 '32,767' 입니다. '10'을 입력할 경우, 10번째 글자까지만 문자를 추출합니다. |
특수문자제외 [선택인수] |
추출할 문자열에서 특수문자 제외여부를 결정합니다. 기본값은 'FALSE' 입니다. 'TRUE'를 입력할 경우, 특수문자를 제외한 문자열이 추출됩니다. |
ExtractLetter 함수 설명
ExtractLetter 는 셀의 값 또는 텍스트에서 숫자를 제외하고'문자만 찾아 추출'하는 엑셀 문자 추출 함수입니다. 시작지점과 종료지점을 지정하여 문자를 추출할 수도 있습니다. '특수문자제외'를 TRUE로 입력할 경우, 숫자와 특수문자를 모두 제외한 문자만 추출됩니다.

문자열에서 숫자만 추출하려면, 숫자 추출 함수인 ExtractNumber 함수를 사용합니다.
엑셀 문자추출 결과값에서 '일부 특수문자'만 제외하고 싶을 경우, 명령문의 Pattern 값을 아래와 같이 변경합니다.
- .Pattern = "[^\d@]"
'// 특수문자 중 '@' 기호만 제외합니다. - .Pattern = "[^\d@/$~%*]"
'// 특수문자 중 '@', '$', '~', '%', '*' 기호만 제외합니다.
이외에 Regex(정규표현식)을 응용하면, 다양한 방법으로 원하는 문자만 추출 또는 제외할 수 있습니다.
그 외 참고사항
- 엑셀 문자 추출 시작지점의 값이 종료지점보다 클 경우, ExtractLetter 함수는 #VALUE! 오류를 반환합니다.
- 한 셀에 입력가능한 최대 문자수는 32,767개 입니다. 따라서 32,767개 보다 많은 문자수가 입력될 경우, 엑셀은 #VALUE! 오류를 반환합니다.
- 문자 추출 시작지점, 종료지점의 값이 숫자가 아닐 경우, 기본값으로 대체됩니다. 시작지점의 기본값은 1, 종료지점의 기본값은 32,767 입니다.
- 엑셀 문자 추출 시작지점, 종료지점의 값으로 0보다 작은값이 입력되면, 기본값으로 대체됩니다.
- 특수문자제외 값으로 'TRUE' 또는 'FALSE'가 아닌 값이 입력되면, 기본값인 'FALSE'로 대체됩니다.
숫자를 제외한 문자 추출, ExtractLetter함수의 동작원리
ExtractLetter 함수 전체 명령문
'############################################################### '오빠두엑셀 VBA 사용자지정함수 ([https://www.oppadu.com](https://www.oppadu.com/)) '■ ExtractLetter 함수 '■ 텍스트에서 문자만 추출합니다. 추출 시작 및 종료위치를 지정할 수 있습니다. '■ 인수 설명 '_____________Val : 문자를 추출할 텍스트 또는 셀입니다. '__________iStart : 추출을 시작할 위치입니다. 기본값은 1 입니다. '___________iEndl : 추출을 종료할 위치입니다. 기본값은 32767 입니다. '__ExcludeSpecial : 특수문자 포함 여부입니다. TRUE일 경우 특수문자를 포함하여 문자를 추출합니다. '############################################################### Function ExtractLetter(Val, Optional iStart, Optional iEnd, Optional ExcludeSpecial) As String Dim i As Long Dim Str As String Dim match As Variant If IsMissing(iEnd) Then iEnd = 32767 If IsMissing(iStart) Then iStart = 0 If IsMissing(ExcludeSpecial) Then ExcludeSpecial = False If iEnd <= 0 Or Not IsNumeric(iEnd) Then iEnd = 32767 If iStart <= 0 Or Not IsNumeric(iStart) Then iStart = 1 If Not IsNumeric(ExcludeSpecial) Then ExcludeSpecial = False Else ExcludeSpecial = cBool(xcludeSpecial) If iStart > iEnd Then ExtractLetter = CVErr(errvalue) If IsObject(Val) Then Str = Val.Value Else Str = Val Str = Mid(Str, iStart, iEnd - iStart + 1) With CreateObject("VBScript.RegExp") If ExcludeSpecial = False Then .Pattern = "\D" Else .Pattern = "[^\d!@#$%\^&*()-_+=~`';:""?<>,.]" End If .Global = True Set match = .Execute(Str) If match.Count > 0 Then ExtractLetter = "" For i = 0 To match.Count - 1 ExtractLetter = ExtractLetter & match(i) Next i End If End With End Function
명령문 동작원리 단계별 알아보기
- 예상되는 오류를 방지하기 위한 오류처리 명령문을 추가합니다.
If IsMissing(iEnd) Then iEnd = 32767 If IsMissing(iStart) Then iStart = 0 If IsMissing(ExcludeSpecial) Then ExcludeSpecial = False If iEnd <= 0 Or Not IsNumeric(iEnd) Then iEnd = 32767 If iStart <= 0 Or Not IsNumeric(iStart) Then iStart = 1 If Not IsNumeric(ExcludeSpecial) Then ExcludeSpecial = False Else ExcludeSpecial = cBool(ExcludeSpecial) If iStart > iEnd Then ExtractLetter = CVErr(errvalue) If IsObject(Val) Then Str = Val.Value Else Str = Val
- 시작지점과 종료지점을 기준으로 문자 추출 대상텍스트를 잘라냅니다.
Str = Mid(Str, iStart, iEnd - iStart + 1)
- 특수문자제외 여부에 따라, 정규표현식에 따라 문자를 추출합니다.
With CreateObject("VBScript.RegExp") If ExcludeSpecial = False Then .Pattern = "\D" Else .Pattern = "[^\d!@#$%\^&*()-_+=~`';:""?<>,.]" End If End With
- 추출된 문자를 하나씩 돌아가며 ExtractLetter 함수의 결과값으로 반환한 뒤, 엑셀 문자 추출 함수를 종료합니다.
.Global = True Set match = .Execute(Str) If match.Count > 0 Then ExtractLetter = "" For i = 0 To match.Count - 1 ExtractLetter = ExtractLetter & match(i) Next i End If