엑셀의 배열은 대부분 영역(RANGE)을 기준으로 생각하는 것이 일반적이다. 문득 한개의 셀 안에 들어있는 텍스트 값에 대해서 배열로 만들 수 있을까 궁금해졌다. 이는 일반적인 코딩에서는 리스트화 시키는 것이 일반적인데, 엑셀에서는 문자열 나누기라는 초강력한 기능이 있기 때문에 잘 사용되지는 않는 듯하다.
각설하고 아래 수식들을 이해해 보자.
셀 안의 글자(텍스트) 길이
대상텍스트를 아래 주소라고 하자. 해당 값을 영역 "대상텍스트"로 설정하고, 글자 길이를 세어보자. LEN 함수를 사용하면, 결과는 17로 띄어쓰기를 포함하여 총 17자라는 것을 알 수 있다.
글자 길이만큼 배열 만들기
ROW
와 INDIRECT
함수로 대상텍스트의 길이에 해당하는 배열을 만들 수 있다. 즉 {1;2;3;4;~~~~17}
까지의 배열을 생성할 수 있다. 물론 대상텍스트의 길이가 변경된다면 해당 배열도 변경이 된다. 줄이면 {=ROW(1:17)}
이라는 수식에 17을 동적으로 만든 것이라고 할 수 있다. 이제는 각 문자가 1~17이라는 INDEX
번호를 가지게 되는 것이다.
INDEX 번호에 해당하는 문자 넣기
시작문자번호를 위에서 만든 배열로 넣고, 1개의 문자를 반환하는 MID함수를 작성해준다. 그러면 각 문자가 각 INDEX 번호에 대입이 되는 글자배열을 만들 수 있다.
그럼... 이걸로 뭘 할 수 있을까?
눈치가 빠르다면 알 수 있겠지만, 각 문자를 배열로 만들어놨기 때문에, MATCH 함수로 해당 문자를 찾아 문자 슬라이스 작업이나, 개수를 찾을 수 있다. 그렇지만, 구지 이렇게 문자별로 찾지 않아도 더 쉽게!!!! 처리가 가능하다.......
배열수식이라는 엑셀의 비교적 고급 기술에 대한 이해를 높이는데 도움을 받고자 했을 뿐이다.
그래도 시작한 김에 생각해 본다.
특정한 구분문자를 기준으로 대상 텍스트를 분리
띄어쓰기를 기준으로 텍스트가 몇 어절로 구성되어있는지를 본다고 가정하면, 구분문자는 " "(띄어쓰기)가 될 것이다. 편의상 분리해서 적어본다면, 다음과 같다.
띄어쓰기를 기준으로, 2번째 띄어 쓰기 이후 나오는 어절 조회
2번째 나오는 어절을 조회하려면, 1번째 어절의 길이를 알아야한다. 총 4개의 어절로 구성이 되어 있음을 위에서 확인 했으므로, 1번째(0), 2번째(1) 어절이 끝나는 INDEX 번호를 조회한 다음, MID 함수로 추출 해주면 된다.
꽤나 길게 적었지만 문자열 슬라이싱에는 여러 방법과 변수가 존재하므로, 기본 개념을 익혀 두는 것이 좋겠다.
끝.