1. 문제
A1셀부터 B2셀까지 공백과 줄 바꿈 문자를 넣어서 연결해서 표시할 때 두 번째 단어의 위치를 맞추려면 어떻게 해야 하는지 탐구해 보겠습니다.
수식은 =CONCAT(A1," ",B1,CHAR(10),A2," ",B2)로서
Concat함수는 문자열을 결합해서 표시해 주는 함수이고,
공백 한 칸은 "(큰따옴표) 다음에 스페이스바를 한 번 밀어 삽입하며,
줄을 바꾸는 것은 키보드로 할 때는 Alt+Enter키를 누르는데, 아스키코드로 하면 10(Line Feed)이라 Char(10)을 사용합니다.
그런데 문제는 한글이 두 바이트이므로 두 번째 줄의 공백 한 칸을 스페이스바를 두 번 더 밀어 3칸으로 하면 맞을 듯한데 그게 아니고,
첫 번째 단어의 길이가 위가 길면 아래에서 스페이스바를 밀어야 하고, 위가 짧다면 위에서 스페이스바를 밀어야 한다는 것입니다.
2. 해법 찾아가기
가. 스페이스 바의 개수
(1) 한 글자 차이인 경우
스페이스바를 한번 더 미니 이제야 두 번째 단어의 위치가 맞습니다.
공백을 4번 삽입하는 것을 Rept(반복) 함수를 이용해
rept(" ",4)라고 입력할 수 있습니다.
=CONCAT(A1," ",B1,CHAR(10),A2,REPT(" ",4),B2)
(2) 두 글자 이상 차이인 경우
한 글자가 공백 3번이므로 두 글자면 6, 그리고 두 글자 사이에 공백 한 개가 이미 들어가 있으므로 7이 됩니다.
=CONCAT(A1," ",B1,CHAR(10),A2,REPT(" ",7),B2)
7을 다시 글자 차이를 이용해 구하면
=(len(a1)-len(a2))*3이 되고,
전체 수식은
=CONCAT(A1," ",B1,CHAR(10),A2,REPT(" ",(LEN(A1)-LEN(A2))*3+1),B2)
이 됩니다.
나. 경우에 따라 위 또는 아래에 공백 삽입하기
첫 번째 단어의 길이가 위가 길다면 아래에 공백을 추가해야 하고, 반대라면 위에 공백을 추가해야 합니다.
첫 번째 단어의 길이가 두 번째 단어의 길이보다 긴 경우는 윗 줄은 그대로 공백 한 칸이고,
아니라면 두 단어의 길이 차이에 3을 곱한 다음 다시 1을 더하면 되므로
IF(LEN(A1)>LEN(A2)," ",REPT(" ",(LEN(A1)-LEN(A2))*3+1))
가 됩니다.
위 수식에서 rept 함수 안의 길이 차이 계산할 때 거짓이므로 Len(A2)가 Len(A1)가 길므로 Len(A2)-Len(A1)인 점 주의해야 합니다.
만약 이게 귀찮으면
절댓값으로 바꾸는 Abs함수를 이용해서
REPT(" ",ABS(LEN(A2)-LEN(A1))*3+1))라고 해도 됩니다.
이제 A1셀을 '하나'라고 수정하고, A2셀을 '넷보다'로 수정하면
#VALUE! 에러가 발생하는데, 첫 번째 단어의 길이가 두 번째 단어의 길이보다 작으므로
REPT(" ",(LEN(A1)-LEN(A2))*3+1)에서 (LEN(A1)-LEN(A2))가 음수가 나와서 그렇습니다.
따라서, 여기도
IF(LEN(A1)>LEN(A2),REPT(" ",ABS((LEN(A1)-LEN(A2)))*3+1)," ")
수식에서 '거짓일 때 값(value if false)'이 공백 한 칸인.것이 첫 번째 if 수식과 다릅니다.
에러도 발생하지 않고 두 번째 단어의 위치도 맞습니다.
'Excel' 카테고리의 다른 글
필터와 필터 함수 (2) (0) | 2024.07.18 |
---|---|
필터와 필터 함수 (1) (0) | 2024.07.17 |
VLookup 오류 - Escape 문자 (3) | 2024.07.15 |
목표 달성 소요일수 구하기 (2) - SubTotal 함수 (0) | 2024.07.12 |
목표 달성 소요일수 구하기 (1) - Scan 함수 (0) | 2024.07.11 |