이어서 텍스트 나누기를 함수로 구현하는 방법에 대해 알아보도록 하겠습니다.
지난 포스팅에서는 LEFT, RIGHT, MID의 텍스트함수와 LEN함수 그리고 FIND함수에 대해 소개하는 시간을 가졌습니다.
https://wienwien.tistory.com/21
오늘은 그 함수들을 활용해서 실제로 어떻게 텍스트를 나눌 수 있는지 알아보시죠!
급하신 분들은 아래 빨간색 수식만 봐주시면 돼요!
다시 익숙한 예제로 돌아갑시다.
이제 여기서 주소를 텍스트 나누기해서 시도/시군구/상세주소로 나누어 봅시다.
STEP 1. 시도별 주소 나누기
사실 LEFT 함수를 사용하면 위의 주소에서 시도별 주소는 매우 쉽게 나눌 수 있습니다.
그냥 =LEFT(C2,2)라고 입력하면 바로 "경기"라고 출력될 거에요. 왜냐구요?
모든 시도별 주소가 가장 처음 텍스트 2개를 차지하기 때문입니다.
그렇지만 아래와 같은 데이터라면 어떨까요?
경기도는 3글자, 대구광역시는 5글자, 만약 전라북도가 있다면 4글자가 되겠죠.
이를 자동화할 방법이 필요합니다. 이를 위해 앞서 배운 FIND함수를 활용합니다.
FIND함수를 활용해서 가장 먼저 공백(" ")이 있는 위치를 파악하는 것이죠.
그리고 이를 LEFT 함수의 두 번째 인수에 활용하는 방법입니다.
로스의 주소를 자세히 보겠습니다.
시도별 주소인 경기도는 3글자이고 4번째 자리에 처음으로 공백이 자리합니다.
=FIND(" ",C2)라고 입력하면 4라는 결과값을 얻을 수 있겠죠.
이를 LEFT함수에 활용하는 것입니다.
우리는 =LEFT(C2,3)을 입력해야 합니다. 그런데 앞서 FIND함수에서는 결과값으로 4를 얻었습니다.
그럼 어떻게 할까요?
그렇습니다. FIND함수의 결과값에서 -1을 하게되면 3을 얻게 되겠죠.
위의 그림처럼 이를 그대로 LEFT함수의 2번째 인수 자리에 넣어주면 됩니다.
따라서 시도별 주소를 빼내는 수식은 =LEFT(C2,FIND(" ",C2)-1)이 되겠습니다.
STEP 2. 시군구별 주소 나누기
다음으로 시군구별 주소의 텍스트를 구해보도록 합시다.
이번에는 MID함수를 활용할 차례입니다.
MID함수는 시작 위치와 시작 이후 몇 개의 텍스트를 추출할 것인지 글자 수를 설정해주어야 합니다.
FIND함수의 세 번째 인수를 기억하시나요?
=FIND(find_text, within_test, [start_num])
FIND함수의 세 번째 인수는 필수값은 아니지만, 텍스트 나누기를 함수로 구현하는데 아주 중요한 역할을 합니다.
바로 색인 시작 위치였죠.
위의 예시에서 각 주소 텍스트를 나누는 구분 기호는 공백(" ")입니다.
앞서 시도별 주소 텍스트를 나눌 때, 세 번째 인수 없이 FIND함수를 사용해서 첫 번째 공백의 위치를 구했습니다.
3번째 인수를 활용하여 색인 시작 위치를 지정해주지 않으면, FIND함수는 항상 첫 번째 공백의 위치를 반환할 뿐입니다.
어떻게하면 두 번째 공백의 위치를 찾도록 할 수 있을까요?
바로 FIND함수의 세 번째 인수 자리에 FIND함수를 활용하는 것입니다.
=FIND(" ",C2)의 결과값은 4였습니다. 이는 첫 번째 공백의 위치이죠.
우리가 해야할 것은 이 첫 번째 공백 이후에 나오는 공백의 위치를 찾는 것입니다.
감이 조금 오시나요?
이렇게 해보죠. =FIND(" ",C2,FIND(" ",C2)+1)
위의 수식은 첫 번째 공백이 나오는 위치보다 한 칸 오른쪽에서부터 공백이 있는 위치를 반환하라는 함수가 되겠습니다.
이제 두 번째 공백의 위치를 찾았으니, 시군구별 주소를 빼내어 봅시다.
단순히 로스의 주소에서 시군구별 주소를 빼내려면, =MID(C2,5,3)를 입력하면 "용인시"를 출력할 수 있습니다.
MID함수에서 쓰인 5와 3을 위의 FIND함수를 이용해서 나타낼 수 있습니다.
여기서 5는 시작 위치를 뜻합니다. 시군구별 주소의 시작 위치는 어디인가요?
바로 첫 번째 공백 다음이겠죠. 따라서 5는 FIND(" ",C2)+1로 표현할 수 있겠습니다.
다음으로는 3을 표현해봅시다. 여기서 3은 첫 번째 공백 이후 두 번째 공백까지의 텍스트 개수를 뜻합니다.
"용인시"가 3글자라는 것을 표현한거죠. 이를 FIND함수로 표현하려면?
앞서 살펴본 두 번째 공백 위치(8)에서 첫 번째 공백 위치(4)를 빼고 1을 더 빼주면 됩니다! (3 = 8-4-1)
따라서, FIND(" ",C2,FIND(" ",C2)+1)-FIND(" ",C2)-1이 되겠습니다.
이제 MID(C2,5,3)에서 각각 우리가 구해본 수식을 대입만 하면 되겠습니다.
=MID(C2,FIND(" ",C2)+1,FIND(" ",C2,FIND(" ",C2)+1)-FIND(" ",C2-1)
STEP 3. 상세주소 나누기
중간에 껴있는 시군구별 주소를 나누는 게 조금 복잡했습니다. (차근차근 따라하시면 하실 수 있어요!)
마지막 단계인 상세주소를 나눠볼텐데요.
RIGHT함수와 LEN함수를 이용해 훨씬 중간 텍스트보다 훨씬 간편하게 찾아낼 수 있습니다.
=RIGHT(C2,3)을 입력하면 "처인구"라는 값을 얻을 수 있습니다.
이제 고민해야 될 부분이 어딘지 아시겠죠?
우리는 저 3을 어떻게 함수로 표현할 수 있을까요?
저 3이라는 값은 두 번째 공백 다음부터 있는 텍스트의 개수입니다.
따라서 우리는 3을 구하기 위해, 텍스트의 길이에서 두 번째 공백의 위치를 빼주면 되겠습니다. (3 = 11-8)
텍스트의 길이인 11은 LEN(C2)로 쉽게 구할 수 있고, 두 번째 공백의 위치는 앞서 시군구별 주소를 나눌 때 미리 수식을 작성해 두었었죠? FIND(" ",C2,FIND(" ",C2)+1)입니다.
이제 대입해보죠.
=RIGHT(C2,LEN(C2)-FIND(" ",C2,FIND(" ",C2)+1))
아, 참고로 말씀드리면 FIND함수 대신 SEARCH함수를 써도 같은 결과를 얻으실 수 있습니다.
사용법이 동일한 함수입니다!
쓰다보니 포스팅이 좀 길어졌네요.
아직 엑셀에 익숙하지 않으신 분들은 함수 안에 함수가 계속해서 들어가는 부분이 정신 없으실 지도 모르겠습니다.
하지만 또 익숙해져서 업무자동화를 이뤄내는 날이 올 수 있을 거에요!
다음에는 더더욱 유익한 포스팅으로 돌아오겠습니다.
-끗-
'칼퇴를 위한 엑셀' 카테고리의 다른 글
[엑셀] 계산 연산자 총정리! (산술, 비교, 텍스트연결, 참조) (0) | 2020.04.19 |
---|---|
[엑셀] 나만의 단축키 만들기: 빠른 실행 도구 모음 (2) | 2020.04.18 |
[엑셀] 텍스트 나누기 2-1편: 함수 활용(텍스트함수, LEN함수, FIND함수) (0) | 2020.04.15 |
[엑셀] 텍스트 나누기 1편: 엑셀 기본기능 활용 (0) | 2020.04.14 |
[엑셀] 함수 자동완성 초간단 꿀팁! (5) | 2020.04.12 |
댓글