|
[Excel VBA] 영문과 한글이 혼합되어 있는 데이터 분리하기
오늘은 3월4일에 진행하는 장미희님의 Excel 매크로&VBA 과정
중 VBA를 활용하여 영문과 한글이 혼합되어 있는 데이터를 분리하는 방법에 대해서 알아보도록 하겠습니다.
(사용버전: 2003)
엑셀 매크로 또는 엑셀 VBA는 엑셀사용자라면 언젠가는 도전하고 싶은
목표입니다. 실제 주변에서나 본인의 경험상 엑셀VBA로 엑셀 작업시간과 노력이 적게 드는 경우를 빈번하게
경험하고 있습니다. 엑셀 VBA로 편리하게 작업할 수 있는 예를 살펴보겠습니다.
다음과 같이 한글과 영문이 섞여 있는 자료에서 한글과 영문을 VBA로 작성한
기능으로 각각 다른 열에 분리해서 표시하겠습니다.
<영문과 한글 혼합>
<영문과 한글 분리>
[영문과 한글 혼합- 영문과 한글 분리]
<1> 사용되는 명령어들
엑셀VBA작업을 하려면 VBA명령어와 엑셀의 기능에 대해 잘 알고
있어야 합니다. VBA명령어는 VBA를 학습하면서 배워나가면 되고 엑셀 기능은 엑셀을 많이 사용해서 이런
저런 상황에서 적합한 엑셀 기능을 사용할 수 있어야 합니다. 즉, 사용되어야 하는 엑셀 기능의 VBA
표현식을 작성하기가 쉽거든요.
- VBA의 고유의 명령어
CurrentRegion : 연속적으로 데이터가 입력되어 있는 범위
Offset(행,열) : 위치를 지정하는 행과 열만큼 이동
Resize(행,열) : 범위의 크기를 지정하는 행과 열만큼 범위 재지정
-
VBA 명령어지만 엑셀의 함수이름과 같은 기능을 가지는 명령어
Len : 데이터의 길이를 구하는 함수
Asc : 글자의 아스키코드 값을 구하는 함수
Mid : 문자열 데이터에서 지정된 위치에서 지정된 개수만큼 데이터 추출
Left : 문자열 데이터에서 지정된 개수만큼 왼쪽에서 데이터 추출
Right : 문자열 데이터에서 지정된 개수만큼 오른쪽에서 데이터 추출
- 엑셀의 열 너비 자동맞춤 기능을 VBA에서 사용
AutoFit : 열과 행의 너비와 높이를 자동으로 조절 |
<2> 아스키 값
한글과 영문을 분리하는데 사용하는 아스키 값입니다.
<3> 실제 작성한 VBA 코드입니다.
Sub 이름분리()
Dim i As Integer
Dim word As Integer
Dim rng As Range
Dim 행수 As Integer
행수 = Range("A1").CurrentRegion.Rows.Count
For Each rng In Range("a1").CurrentRegion.Offset(1,
0).Resize(행수 - 1, 1)
For i = 1 To Len(rng)
word = Asc(Mid(rng, i, 1))
If ((word >= 65 And word <= 122) Or word = 32) Then
Else
rng.Offset(0, 1) = Left(rng, i - 1)
rng.Offset(0, 2) = Right(rng, Len(rng) - i + 1)
Exit For
End If
Next
Next
Columns("b:c").AutoFit
End Sub |
|
|