Excel - 파워 쿼리

소재지, 특지구분, 본번, 부번 합치기(3) - Power Query(1)

별동산 2024. 5. 24. 08:15
반응형

소재지와 특지구분, 본번, 부번이 나뉘어 있을 경우에 이를 합치는 것을 파워 쿼리에서 해보겠습니다.

지번주소 문제.xlsx
0.01MB

 

두 가지 경우가 있는데, 

첫 번째는 특지구분에 산과 빈칸이 있고, 부번이 숫자와 빈칸인 경우이고,

 

 

두 번째는 특지구분에 산과 일반이 있고, 부번이 0과 양수로 구성된 경우입니다.

 

 

2. 특지 구분에 일반이 없는 경우

특지구분은 신경 쓸 필요 없이 부번이 있는지 여부만 신경 쓰면 되므로 간단합니다.

 

① 왼쪽 표 영역에 커서를 놓고 데이터 > 테이블/범위에서를 누릅니다.

 

② 표 만들기 창이 열리면서 범위와 '머리글 포함'에 체크가 되어 있는데 맞으므로 확인 버튼을 누릅니다.

 

③ 그러면 파워 쿼리 편집기(Power Query Editor)가 열리면서 표의 내용이 표시되는데,

데이터가 없는 셀은 null로 표시되는 것이 엑셀과 다릅니다.

 

엑셀은 Home 등  탭 이름이 한글로 잘 보이는데, 파워 쿼리 편집기만 탭 이름이 이상하게 영어로 보이는데 해결 방법을 알게 되면 공유하도록 하겠습니다.

 

④ 열 추가(Add Column) 탭에서 '사용자 지정 열'을 클릭합니다. 설명은 사용자 지정 수식에 따라 이 표에 새로운 열을 만든다고 되어 있습니다.

 

⑤ '사용자 지정 열' 창이 열리면서 새로운 열의 이름이 '사용자 지정'으로 되어 있고, 그 아래 '사용자 지정 수식을 입력하는 상자가 있는데 여기에 수식을 입력하는데,

 

구문은

if 조건 then 참일 경우 값 else 거짓일 때 값

입니다.

 

VBA의 if 구문과 구조는 같은데

파워 쿼리에서는 대, 소문자를 구분하므로 if, then, else를 소문자로 써야 하고,

ElseIf가 없으므로, If문 안에 다시 If문을 넣으면 되고,

Else가 없으면 에러가 발생하므로 반드시 Else와 거짓일 때 값이 있어야 합니다.

 

따라서, 수식은

= 다음에 if를 입력하고,

오른쪽 이용 가능한 열에서 부번을 더블 클릭해서 [부번]식으로 대괄호 안에 열 이름이 들어가도록 합니다.

 

참과 거짓일 때 값이 구분되기 좋도록 하려면 Tab키를 누르면 될까 하고 누르면 이용가능한 열로 이동하므로 스페이스바를 눌러 공백을 아래와 같이 추가해야 합니다.

if ([부번]<>null) then 
    [소재지] & " " & [특지구분] & [본번] &"-" &[부번]
else
    [소재지] & " " & [특지구분] & [본번]

 

아래 '구문 오류가 없다'라고 하므로(정확하지는 않음)

확인(OK) 버튼을 누릅니다.

 

그리고, 하나 더 주의할 점은 

[부번]<>0으로 하면 안 된다는 것입니다. 왜냐하면 공백이 null로 표시되기 때문입니다.

 

⑥ 그런데 에러가 발생합니다.

아래 표시되는 표시 에러를 보니 문자와 숫자를 &로 결합할 수 없다고 합니다.

 

따라서, 숫자를 문자로 바꿔야 하는데 이때 사용하는 함수가

Number.ToText입니다.

 

오른쪽 쿼리 설정 창에서 '추가된 사용자 지정 항목' 오른쪽의 톱니바퀴(설정) 아이콘을 누른 후

 

[본번] 앞에 Number.t까지 입력하면 Number.ToText가 보이므로

 

이동한 후 Enter 또는 Tab 키를 누르고, 괄호 안에 [본번]을 넣습니다. [부번]도 마찬가지로 수정합니다.

 

⑦ 그리고, OK 버튼을 누르면 될 줄 알았더니 여전히 Error가 발생합니다.

 

원인은 특지구분이 null일 때는 바로 결합하면 안 되고 공백 한 칸(" ")을 결합하도록 해야 하므로 if문 안에 다시 if문을 추가해야 합니다.

 

⑧ 완성된 수식은 아래와 같습니다.

if ([부번] <> null) then 
    if [특지구분]=null then
       [소재지] & " " & Number.ToText([본번]) & "-" & Number.ToText([부번])
    else 
       [소재지] & [특지구분] & Number.ToText([본번]) & "-" & Number.ToText([부번])
    
else
    if [특지구분]=null then
        [소재지] & " " & Number.ToText([본번])
    else 
        [소재지] & [특지구분] & Number.ToText([본번])

 

if ([부번] <> null) then 안에도 if문이 또 들어가 있고,

else 문에도 if문이 들어가 있습니다.

 

비로소 제대로 주소가 결합되었습니다.

주소가 모두 보이지 않으면 주소 오른쪽의 경계선을 오른쪽으로 끌어야 합니다.

 

주소 열이 넓어진 상태에서 더블 클릭하면 오히려 폭이 좁아집니다.

 

⑨ 홈 탭에서 '닫기 및 로드' 윗부분을 누르거나 '닫기 및 로드' 아래 '닫기 및 다음으로 로드'를 누른 다음

 

'표'와 '새로운 워크시트'가 선택되어 있으므로 확인 버튼을 누릅니다.

 

그러면 아래와 같이 특지구분과 본번, 부번이 모두 맞게 결합되었습니다.

 

지번주소 결합 완성(3).xlsx
0.02MB

반응형