rand(life)

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

컴퓨터/엑셀

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

flogsta 2018. 6. 27. 12:00

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


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)       오른쪽 두칸 위치에는 종료한 위치부터 문자열 끝까지