메뉴
실무 위키VBA 코드ExtractLetter

ExtractLetter

Function

셀 또는 문자열에서 숫자를 제외한 문자만 추출하는 VBA 사용자 지정 함수로, 추출 시작·종료 위치와 특수문자 제외 여부를 지정할 수 있습니다.

ExtractLetter 코드 미리보기
구문 = ExtractLetter ( 텍스트, [시작지점], [종료지점], [특수문자제외] )
인수구분 설명
텍스트 필수
문자만 추출할 값이 적힌 셀 또는 문자열입니다.
시작지점 선택
문자 추출을 시작할 시작위치입니다. 기본값은 1 입니다.
예를 들어 '5'를 입력할 경우 5번째 글자부터 문자를 추출합니다.
종료지점 선택
문자 추출을 종료할 지점입니다. 기본값은 셀 안의 최대 글자수인 32,767 입니다.
예를 들어 '10'을 입력할 경우 10번째 글자까지만 문자를 추출합니다.
특수문자제외 선택
추출할 문자열에서 특수문자 제외여부를 결정합니다. 기본값은 FALSE 입니다.
'TRUE'를 입력할 경우 특수문자를 제외한 문자열이 추출됩니다.

마스터 코드

복사한 코드는 VBA 편집기(Alt + F11) 새 모듈에 붙여넣어 사용하세요
Module1 · 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

활용 예제

기본 사용 — 숫자를 제외한 문자 추출
= ExtractLetter ( "서초1동-스타2 장인*대회" )
'// '서초동-스타 장인*대회'를 반환합니다.
= ExtractLetter ( "서초1동-스타2 장인*대회" , , , TRUE )
'// '서초동스타 장인대회'를 반환합니다.
추출 시작·종료 지점 지정
= ExtractLetter ( "서초1동-스타2 장인*대회" , 6 )
'// '스타 장인*대회'를 반환합니다.
= ExtractLetter ( "서초1동-스타2 장인*대회" , 6 , 10 )
'// '스타장인'을 반환합니다.

안내사항

시작지점이 종료지점보다 크거나 한 셀에 32,767개를 넘는 문자가 입력되면 #VALUE! 오류를 반환합니다.
시작지점·종료지점 값이 숫자가 아니거나 0보다 작으면 기본값(1·32,767)으로 대체됩니다.
특수문자제외 값이 TRUE·FALSE 가 아니면 기본값인 FALSE 로 대체됩니다.
댓글 10
5 (7개 평가)
약돌한우
약돌한우 2020.04.14 22:14
좋은 자료 고맙습니다.
흑룡
흑룡 2020.04.15 18:46
항상 잘 보고 있어요^^
코코넛
코코넛 2020.04.18 12:25
유익한 자료 감사힙니다~
yim****
yim**** 2020.10.17 07:54
감사합니다
오렌지냠냠냠
오렌지냠냠냠 2021.07.13 21:00
2.5mL에서 L가 지워지는데 어떻게 해야하나요?
오빠두엑셀
오빠두엑셀 작성자 2021.07.16 05:00
안녕하세요.
2.5mL 을 ExtractLetter로 추출 시, ".mL"이 올바르게 반환됩니다. 다시 한번 확인해보시겠어요?
감사합니다.
오렌지냠냠냠
오렌지냠냠냠 2021.07.16 08:38
특수문자 . 을 빼려고 하면 L이 출력이 안되고(예시) 2.5mL >> m로 나옴)
2.5ml은 ml로 잘 나오는데 대소문자가 섞여 있으면 소문자만 출력이 안되서(2.5ml >> ml // 2.5mL >> m로 나옴)

알려주신 방법에서 아래처럼 조금 수정하니까 mL만 나와서 공유드려요ㅎㅎ 덕분에 해결됐습니다.

감사합니다.

Function ExtractLetter(Val, Optional iStart, Optional iEnd, Optional ExcludeSpecial) As String

Dim i As Long
Dim Str As String
Dim match As Variant


Dim regex As Object
Set regex = CreateObject("VBScript.RegExp")
regex.Pattern = "[a-zA-Z]"
regex.Global = True


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
   
  .Global = True
  Set match = regex.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
537
537 2022.11.15 11:54
진짜 특수문자만 없애고 추출되게 할 수는 없나요?
유러피안유세트(S호) 1SET/백설 → 유러피안유세트S호
이렇게 나오게 하고싶은데 S가 없어지고 숫자가 있어도 숫자가 없어집니다...
오빠두엑셀
오빠두엑셀 작성자 2022.11.16 17:05
안녕하세요.
패턴을 아래와 같이 사용해보세요
.Pattern = "[^0-9() /]+"
강민준🤗
강민준🤗 2024.08.11 12:10
좋은 자료 감사합니다.🙇‍♂️
스크랩 완료