[엑셀 VBA #14] 문자 나누고 합치기 (split, join)





이번 포스팅에서는 문자를 나누는 split문과 문자를 합치는 join문에 대해 알아보겠습니다.


예제를 받고 따라와주세요.






SPLIT



split문은 일반적으로 텍스트 파일을 엑셀로 불러올 때 많이 쓰이는 문법입니다.


엑셀 VBA 실전예제 카테고리 중 "텍스트 파일 엑셀에 입력하기" 포스팅에서 다뤘었습니다.


예를 들어, 텍스트 문서의 내용이 아래와 같습니다.


김정기 윤주환 정문석 고정우 김진기 정윤환


이 경우 위 텍스트 내용을 엑셀에 붙혀넣으면, 아래와 같이 출력됩니다.



하지만 각 셀에 이름이 하나씩 들어가게 하려면, 이름 문자열을 분리해야 합니다.


이럴 때 사용하는 문법이 split 문입니다.


하지만 split 문을 사용할 때에는 한 가지 조건이 붙습니다.


문자가 나눠지는 부분이 일정한 구분자(공백(space bar), 콤마(,), 슬래시(/)) 등으로 나눠져 있어야 합니다.



Sub example_9()


Dim varName() As String        '배열 varName 선언, 형식 에러가 날 경우 As Variant로 변경

Dim i As Long


i = UBound(Split(Cells(3, 1), " ")) - LBound(Split(Cells(3, 1), " ")) + 1    '문자의 개수 확인



ReDim varName(1 To i)            '문자의 개수만큼 배열 크기 설정


varName = Split(Cells(3, 1), " ")            '공백을 기준으로 문자열 나눔 "vbTab" "," ";" 등 여러가지 사용 가능 



Selection.Resize(, i).Value = varName    '선택한 셀을 기준으로 문자 삽입


End Sub




아래와 같이 출력됩니다. (A4셀 선택 후 실행)






JOIN


JOIN문은 배열 형식으로 저장된 값을 하나로 뭉쳐서 출력해줍니다.


SPLIT과 반대되는 개념고, 엑셀의 concatenate 함수와 비슷합니다.






Sub example_9_2()


Dim varName() As String

Dim i As Long


i = UBound(Split(Cells(3, 1), " ")) - LBound(Split(Cells(3, 1), " ")) + 1



ReDim varName(1 To i)


varName = Split(Cells(3, 1), " ")





Cells(8, 1).Value = Join(varName, "/")



End Sub


위의 코드는 SPLIT 예제에서 출력되는 부분을 빼고, 주황색 부분만 더한 코드입니다.


JOIN문을 사용할때도 구분자의 설정이 필요합니다.


SPLIT과 반대로 값 사이사이에 구분자를 넣어서 출력해줍니다.


아래와 같이 출력됩니다.


마찬가지로 구분자를 바꾸면 다른 형식으로 값을 출력할 수 있습니다.








Posted by Simon K
: