네이버 지식인에 올라온 자료가 궁금해서 작성을 해봤다.
배열에 대한 이해도 좀 더 높일 겸해서 VBA 로 코드를 작성해 보면서 디버깅 기능을 이용하여 중간 중간 확인 작업도 해봤다.
Sub 문자_숫자_분리추출()
'// Alt + F11 키를 눌러서 [삽입] - [모듈] 에 이 VBA 코드를 붙여넣기하고 F5 키를 눌러서 실행
Dim rngC, rngAll As Range
Dim v
Dim k As Long
Dim i, c, n As Integer
Set rngAll = Range("A2:A" & Cells(Rows.Count, "A").End(3).Row) '// 범위 구간 설정
Range([B1], Cells(Rows.Count, "B").End(3)).Offset(1).Resize(, 2).ClearContents '// 값을 뿌릴 영역 초기화
For Each rngC In rngAll
v = Split(rngC, "+") '// + 를 구분자로 셀을 분리
ReDim Num(1 To 1): ReDim Dat(1 To 1): n = 0 '// 배열 및 배열에 사용할 변수 초기화
For i = LBound(v) To UBound(v) '// + 구분자로 분리한 배열의 개수만큼 반복
n = n + 1
ReDim Preserve Num(1 To n): ReDim Preserve Dat(1 To n) '// 기존값을 유지하면서 배열크기를 다시 설정
For c = 1 To Len(v(i)) '// 전체 문자길이 만큼 반복
If IsNumeric(Mid(v(i), c, 1)) Then '// 문자열이 숫자일 경우
Num(n) = Num(n) & Mid(v(i), c, 1) '// 각 숫자를 합쳐감
Else
Dat(n) = Dat(n) & Mid(v(i), c, 1) '// 숫자가 아닌 것을 합쳐감
End If
Next c
'Debug.Print "행 =" & rngC.Row & " 숫자 i =" & i & " 숫자 n =" & n & " Dat =" & Trim(Dat(n)) & " Num =" & Num(n)
'// 셀에 뿌리는 작업 처음 k =0 Cells(k + 2, "B") 는 B2 셀
Cells(k + 2, "B") = Trim(Dat(n))
Cells(k + 2, "C") = Num(n)
k = k + 1
Next i
Next rngC
Set rngAll = Nothing '// 메모리 비우기
End Sub
'업무 능력 향상 > 엑셀 VBA 활용' 카테고리의 다른 글
[VBA] 찾고자 하는 파일의 경로명 알아내기 (0) | 2015.06.20 |
---|---|
[VBA] 파일 복사 (VBA FileCopy) (0) | 2015.06.19 |
[VBA] 선택한 폴더의 모든 파일 가져오기 (0) | 2015.06.18 |
[VBA] 중복되는 자료만 찾아서 배경색 저장 (0) | 2015.06.17 |
[VBA] 같은 자료를 콤마로 나열하기 (0) | 2015.06.16 |