정규식을 사용하면 한글에서 한자, 일본어, 영어 등 모든 언어를 분리해 낼 수 있습니다. 정규식 패턴에 언어의 유니코드 영역을 삽입하고 Execute 함수를 사용하면 추출하고 싶은 언어만 분리해 낼 수가 있기 때문입니다. 우선 엑셀 VBA 에서 정규식을 사용하기 위해서는 선행 작업이 필요합니다.
▼ 먼저 VBA 에서 정규식을 사용을 위해서는 지원하는 라이브러리를 추가해야 합니다. [도구] > [참조] 메뉴를 선택해서 라이브러리 추가를 위한 팝업창을 띄웁니다. 사용 가능한 참조 리스트에서 Microsoft VBScript Reqular Expression 5.5 를 선택하고 [확인] 버튼을 누릅니다.
▼ 다음은 프로그램을 위해서 필요한 정보입니다. 문자열에서 추출하고 싶은 언어의 유니코드 영역을 알아야 합니다. 아래 위키 페이지로 가시면 언어별 유니코드 범위를 알 수 있습니다. 한글은 범위가 하나로 해결되지만 한자는 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 정규표현식 사용하는 방법, 공백 문자 제거하기 ▶ 엑셀 VBA 메시지박스 (MsgBox) 에 문자열 줄 바꿈을 적용하는 방법 ▶ 엑셀 Excel 한자 데이터를 입력하고 등록하기 ▶ 엑셀 VBA 메모의 모양을 직사각형, 풍선, 다이어몬드 형태로 만드는 방법 ▶ 엑셀 Excel 특정 문자 시작하고 끝나는 단어 찾기 |
▼ 한글 유니코드는 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 정규표현식 사용하는 방법, 공백 문자 제거하기 ▶ 엑셀 VBA 메시지박스 (MsgBox) 에 문자열 줄 바꿈을 적용하는 방법 ▶ 엑셀 Excel 한자 데이터를 입력하고 등록하기 ▶ 엑셀 VBA 메모의 모양을 직사각형, 풍선, 다이어몬드 형태로 만드는 방법 ▶ 엑셀 Excel 특정 문자 시작하고 끝나는 단어 찾기 |
'엑셀(Excel) > VBA' 카테고리의 다른 글
엑셀 VBA 무한 루프 빠져 나오거나 취소 기능 없애는 방법 (0) | 2023.06.29 |
---|---|
엑셀 VBA 매크로 함수로 공백 제거하기, Trim, RTrim, LTrim 함수 이용 (0) | 2023.06.28 |
엑셀 VBA 날짜 데이터를 비교하거나 연산하기 (0) | 2023.06.27 |
엑셀 VBA 변수 범위 종류와 설정 방법 (1) | 2023.06.23 |
엑셀 VBA Cells 속성의 다양한 사용법 (0) | 2023.06.22 |
엑셀 VBA 마지막 행과 열의 수 찾기 (3) | 2023.06.22 |
엑셀 VBA 셀에서 연속된 데이터 한 번에 선택 CurrentRegion, UsedRange 사용 (0) | 2023.06.21 |
엑셀 VBA 나머지를 구하기 위한 Mod 연산자와 몫 구하는 연산자 사용법 (0) | 2023.06.21 |