Excel

두번째 문자(열)의 시작 위치 맞추기

별동산 2024. 7. 16. 08:34
반응형

1. 문제

두번째 문자의 위치 맞추기(문제).xlsx
0.01MB

 
 
 
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 수식과 다릅니다.

에러도 발생하지 않고 두 번째 단어의 위치도 맞습니다.
 

두번째 문자의 위치 맞추기(완성).xlsx
0.01MB
반응형