엑셀 매크로 한글 영어 분리 - egsel maekeulo hangeul yeong-eo bunli

엑셀 팁 - 한 셀에 들어있는 영어 + 한글을 별개의 셀로 분리하는 작업

지난 번에 쓴 글과 비슷한 내용인데

엑셀 매크로 한글 영어 분리 - egsel maekeulo hangeul yeong-eo bunli

A처럼 되어있는 것을 B와 C열로 분리하는 작업이다.

Option Explicit

Sub macro()

Dim r As Range

Dim lc As Long

Dim s As String

Dim bl As Boolean

For Each r In Range("A1").EntireColumn.SpecialCells(2)

Do

lc = lc + 1

s = Mid(r, lc, 1)

If Asc(s) = 32 Then

bl = False

ElseIf Asc(s) < 97 Or Asc(s) > 122 Then

bl = True

End If

Loop Until bl = True

r(, 2) = Left(r, lc - 1)

r(, 3) = Mid(r, lc)

lc = 1

bl = False

Next

End Sub

SpecialCells(2) 는 상수값이 들어있는 셀을 의미한다. 쉽게 말해 빈칸이 아닌 셀을 말한다.

s = Mid(r, lc, 1) 해당 문자열에서 한 글자씩 떼어내서 아스키값을 검사한다.

Asc(s) = 32 아스키값 32는 공백 한칸이다. 1,4 행처럼 숙어도 있기 때문에 공백을 발견하면 자르는 것이 아니라, 영어 소문자가 아닌 것을 만나면 잘라야한다. 그래서 공백이 나올때는 무시하고 지나간다.

ElseIf Asc(s) < 97 Or Asc(s) > 122 Then 영어 소문자의 아스키값은 97~122이다. 이 범위에서 벗어나는지를 검사한다.

bl = True 영어 소문자가 아니면 bl을 True로 설정하고,

Loop Until bl = True bl이 True이면 순환문을 종료

r(, 2) = Left(r, lc - 1) 오른쪽 한칸 위치에는 문자열 왼쪽부터 종료한 위치까지

r(, 3) = Mid(r, lc) 오른쪽 두칸 위치에는 종료한 위치부터 문자열 끝까지

숫자, 영문자, 한글, 기호를 선택하여 추출하는 VBA함수 소스

A열에 입력된 혼합 문자에서 원하는 유형만 추출해 주는 VBA 함수입니다.

엑셀 매크로 한글 영어 분리 - egsel maekeulo hangeul yeong-eo bunli

VB 편집기에 작성된 사용자 정의 함수 소스가 있습니다.

엑셀 매크로 한글 영어 분리 - egsel maekeulo hangeul yeong-eo bunli

[사용자 정의 함수 사용 방법]

1. 함수 마법사에서 [사용자 정의]를 선택하면 작성된 [선택추출] 함수가 표시됩니다.

엑셀 매크로 한글 영어 분리 - egsel maekeulo hangeul yeong-eo bunli

2.함수를 선택하면 다른 일반 함수처럼 인수를 입력할 수 있습니다.

    1번째 인수는 셀 주소를 입력하고, 2번째 인수는 아래의 4개 중에서 하나를 입력합니다.

     숫자(구분:N, 생략), 영문자(구분:E), 한글(구분:H), 기타문자(구분:O)

엑셀 매크로 한글 영어 분리 - egsel maekeulo hangeul yeong-eo bunli

3. 함수 복사 방법은 다른 일반 함수와 동일합니다.

엑셀 매크로 한글 영어 분리 - egsel maekeulo hangeul yeong-eo bunli
엑셀 매크로 한글 영어 분리 - egsel maekeulo hangeul yeong-eo bunli

출처 : 엑셀 하루에 하나씩 카페

1.해당 엑셀 시트에서 Alt+F11을 누르거나, 도구-매크로-'Visual Basic Editor"를 실행합니다.
2. VBA편집기가 나오면, 메뉴바에서 "삽입-모듈"을 실행합니다.
3. 하얀 백지화면이 나오면 아래 코드를 그대로 복사해다가 붙여넣습니다.
4. Alt+F11을 눌러 다시 원래의 워크시트로 돌아오십니다.
5. 일반 워크시트 함수와 똑같이 사용하시면 됩니다.

** 단점은 띄어쓰기가 된 걸 인식하지 못한다는 것이다.
    그래서 편법으로 " " 공백문자를 인식하도록 하는" "를 추가했다.
    두개의 조건문에 모두 넣으니 인식이 안되길래 한번씩 사용하는 걸로 하고 두번에 걸쳐서 자료를 추출했더니
    원하는 결과값이 얻어졌다. 심봤다!!!!!!!!!!

아래 함수를 직접 만들어주신 분께 정말 감사드립니다

Function CutText(sText As String, Optional LanguageType As Integer = 1) As Variant

' ----------------------------------------------------------------------------------------

설명 : 인수로 전달한 sText 에서 LanguageType  값에 따라 지정한

'        형식의 텍스트만 분리해서 전달합니다.

'         LanguageType  사용값

'         1 : 숫자

'         2 : 영어 : 띠어쓰기 인식하도록 " " 추가하고, ' 인식하도록 추가

'         3 : 한글

'         4 : 한자

작성일 : 2005 / 9 / 20

' ----------------------------------------------------------------------------------------

    Dim sCut As String

    Dim sTMP As String

    Dim i As Integer

    Application.Volatile

    If LanguageType > 4 Then

        CutText = CVErr(xlErrNA)    '#N/A 오류를 반환

        Exit Function

    End If

    For i = 1 To Len(sText)

        sCut = Mid(sText, i, 1)

        Select Case sCut

            Case 0 To 9

                If LanguageType = 1 Then sTMP = sTMP & sCut

            Case "a" To "z", "A" To "Z", " ", "'"

                If LanguageType = 2 Then sTMP = sTMP & sCut

            Case "" To "", "" To "", "" To ""

                If LanguageType = 3 Then sTMP = sTMP & sCut

            Case Else

                If LanguageType = 4 Then

                    If Asc(sCut) >= -13663 And Asc(sCut) < 0 Then sTMP = sTMP & sCut

                End If

        End Select

    Next

    CutText = sTMP

End Function