엑셀 VBA 정규식으로 한글, 일어, 한자 추출하기

엑셀(Excel)/VBA

엑셀 VBA 정규식으로 한글, 일어, 한자 추출하기

 

환경: Microsoft Excel 2013

 

정규식을 사용하면 한글에서 한자, 일본어, 영어 등 모든 언어를 분리해 낼 수 있습니다. 정규식 패턴에 언어의 유니코드 영역을 삽입하고 Execute 함수를 사용하면 추출하고 싶은 언어만 분리해 낼 수가 있습니다.

 

먼저 VBA 에서 정규식을 사용하기 위한 환경이 설정되어야 합니다. [도구] > [참조] 메뉴를 선택해서 라이브러리 추가를 위한 팝업창을 띄웁니다. 사용 가능한 참조 리스트에서 Microsoft VBScript Reqular Expression 5.5 를 선택하고 [확인] 버튼을 누릅니다.

 

엑셀 VBA 정규식으로 한글, 일어, 한자 추출하기

 

다음은 프로그램을 위해서 필요한 정보입니다. 문자열에서 추출하고 싶은 언어의 유니코드 영역을 알아야 합니다. 아래 위키 페이지로 가시면 언어별 유니코드 범위를 알 수 있습니다. 한글은 범위가 하나로 해결되지만 한자는 4가지 정도 됩니다. 패턴 작성할 때도 모든 범위를 넣어야 되겠죠.

https://ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C_%EB%B8%94%EB%A1%9D

엑셀 VBA 정규식으로 한글, 일어, 한자 추출하기

 

한글 유니코드는 AC00 ~ D7AF 사이값입니다. 두 유니코드 사이에 한글에서 사용하는 모든 글자들이 들어가 있습니다. 추출하고 싶은 유니코드 값을 확인했다면 Pattern 속성값에 정규식을 작성해서 넣습니다. “u” 는 유니코드를 나타내며 “+” 하나 이상을 말합니다. 그리고 “[]” 은 범위를 나타냅니다. 이렇게 식을 만들어서 넣고 Execute() 함수를 호출하면 패턴에 일치하는 값들을 배열 형태로 리턴 합니다. 리턴한 값을 For Each 반복문으로 하나씩 꺼내서 쓸 수 있습니다. 아래 소스는 콘솔에 출력을 해 본 것입니다.

 

Sub 한글추출()

 

    Dim RegEx As Object

    Set RegEx = CreateObject("vbscript.regexp")

   

    RegEx.IgnoreCase = True ' 대소문자 구분안함

    RegEx.Global = True

   

    sStr = "한국어의 한자(韓國語 漢字)는 한국에서 쓰이는 한자(漢字)"

   

    '// 한글 추출

    RegEx.Pattern = "[\uAC00-\uD7AF]+"

    Set matches = RegEx.Execute(sStr)

    

    For Each mch In matches

        Debug.Print mch.Value

    Next

       

    '// 한자 추출

    RegEx.Pattern = "[\u2E80-\u2EFF\u3400-\u4DBF\u4E00-\u9FBF\uF900-\uFAFF\u20000-\u2A6DF\u2F800-\u2FA1F]+"

    Set matches = RegEx.Execute(sStr)

    

    For Each mch In matches

        Debug.Print mch.Value

    Next

   

End Sub

 

위의 소스를 실행한 결과 값입니다. 한글과 한자를 추출해서 콘솔에 출력했습니다. 이렇게 텍스트에서 불필요한 것들을 추출하고 싶다면 정규식을 이용하세요. 응용만 잘 하시면 아주 다양한 용도로 사용이 가능합니다. 

엑셀 VBA 정규식으로 한글, 일어, 한자 추출하기

 

Posted by 녹두장군