InStr 를 이용한 셀 분리
이번에는 InStr 함수를 이용하여 셀 분리를 해보겠습니다.
범위 지정은 Range([A2], Cells(Rows.Count, "A").End(3))
구분자의 위치값을 반환하여 Left 함수 및 Mid 함수를 이용하여 원하는 구간을 잘라낼 수 있다.
Sub Cell_Split()
Dim rngC As Range '// 한 Cell 씩 변하는 변수 지정
Dim rngTarget As Range '// 대상 범위 지정변수
Dim Split_L As Long '// 구분자 위치 변수
Dim deLimiter As String '// 문자 구분자 변수
Application.ScreenUpdating = False '//화면 업데이트 (일시)정지
Set rngTarget = Range([A2], Cells(Rows.Count, "A").End(3))
'// A열 2행부터 값이 들어있는 마지막 행까지의 범위를 지정
deLimiter = "/" '//문자 구분자
For Each rngC In rngTarget
Split_L = InStr(rngC.Value, deLimiter)
'// InStr 함수 : 한 문자열 안에 특정 문자열이 처음으로 나타난 위치값을 반환
If Split_L > 0 Then
rngC.Offset(0, 2).Value = Mid(rngC.Value, Split_L + 1, Len(rngC.Value) - Split_L)
'rngC.Offset(0, 1).Value = Left(rngC.Value, Split_L - 1) '// 구분자 앞부분을 표시
End If
Next rngC
Set rngTarget = Nothing '// 변수 초기화
Columns("C:G").AutoFit
End Sub
rngC.Offset(0,2) 의 의미는 rngC 변수로부터 우측으로 2열 이동하라는 의미다.
만약 현재 셀에다가는 구분자의 왼쪽 값을 표시하고 싶다면
rngC.Offset(0,1).Value = Mid(rngC.Value, Split_L + 1, Len(rngC.Value) - Split_L)
rngC.Value = Left(rngC.Value, Split_L - 1)
로 변경해주면 된다.
우측에 표시될 값부터 먼저 표기한 이유는 위아래 순서를 변경해보면 알아요.
하지만, split 함수를 이용하면 훨씬 더 깔끔하게 해결할 수 있습니다.
첨부파일에 아래 코드를 추가로 포함시켜 놓았습니다.
Sub 셀분리()
Dim rngC, rngAll As Range
Dim v
Set rngAll = Range([A2], Cells(Rows.Count, "A").End(3))
Range([C2], Cells(Rows.Count, "D")).ClearContents '// 표시할 영역 데이터 전부 지우기
On Error Resume Next
For Each rngC In rngAll
v = Split(rngC, "/")
Cells(rngC.Row, "C") = Trim(v(0))
Cells(rngC.Row, "D") = Trim(v(1))
Next rngC
Set rngAll = Nothing
Columns("C:G").AutoFit
End Sub
'업무 능력 향상 > 엑셀 VBA 기초' 카테고리의 다른 글
[VBA기초] 색상을 이용한 결과값 구하기 (0) | 2014.01.26 |
---|---|
[VBA] convert TextNumber to Number (0) | 2014.01.25 |
[VBA기초] 자체셀내의 중복여부 검사 (0) | 2014.01.11 |
[VBA기초] 아스키코드 알아내기 (0) | 2014.01.10 |
엑셀 VBA 참고하면 좋은 사이트 소개 (1) | 2013.12.21 |