VB(A)/당근쨈 & Chronicle

[& Chronicle] 숫자와 영문자가 혼용된 상태에서 영문자만 추출하기

당근쨈 2017. 5. 2. 16:01

아래와 같이 숫자와 영문이 혼합되어 있는 셀에서 영문만 골라내는 수식과 사용자정의함수입니다.


먼저 Chronicle님의 수식입니다.
=MID(A1,MATCH(TRUE,ISERROR(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)*1),0),LEN(A1)-COUNT(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)*1))

위 수식의 풀이 과정입니다.
    1. 영문자가 시작되는 위치를 파악합니다.
    2. 영문자의 수를 알아냅니다.(총 글자수에서 숫자의 글자수를 뺍니다.) 

다음은 VBA를 이용한 사용자정의함수입니다.
셀에서 영문자만 골라내는 방법은 여러가지가 있습니다.
저는 텍스트 처리에 특화된 정규식을 선택했습니다.
셀 내용 중 영문자만 쏙쏙 골라내는 간단한 규칙입니다.
그 결과는 아래 그림과 같습니다.

Option Explicit
Function GetEng(MyData As StringAs String
 
    With CreateObject("Vbscript.RegExp")    '정규식 생성
    
        .IgnoreCase = True  '대소문자 구분X
        .Pattern = "[a-z]+" '영문자만 체크
        
        If .test(MyData) Then   '영문자가 있으면 영문자만 출력
            GetEng = .Execute(MyData)(0)
            
        Else    '영문자가 없으면 - 출력
            GetEng = "-"
        End If
    
    End With
    
End Function
 
cs

이제 그 속을 들여다보겠습니다.
정규식의 핵심은 바로 패턴입니다.
영문자만 추출한다는 [a-z]+ 라는 패턴을 사용했습니다.
    1. a부터 z까지이므로 모든 알파벳을 뜻하고
    2. 뒤에 +가 있으니 알파벳이 연속으로 등장하는구나라는 걸 추측할 수 있습니다.

IgnoreCase = True 를 보면 대소문자를 무시한다는 뜻으로 짐작이 갑니다.
비주얼베이직의 특장점 중 하나가 언어를 몰라도 글자만으로 그 뜻을 알 수 있다는 것이지요.

문자만+추출하기.xlsm