EXCEL - VBA

주소를 법정동, 특지 구분, 본번, 부번으로 분리하기(2)

별동산 2024. 8. 14. 08:08
반응형

PNU만들기(주소분리)(법정동).xlsm
0.02MB

 

법정동을 구하는 것은 아래 글을 참고 바랍니다.

https://lsw3210.tistory.com/563

 

5. 특지 구분 구하기

특지는 법정동 다음에 '산'이 있는지 여부로 판단하면 되므로

법정동 함수를 참고해서 만들면 됩니다.

 

코드는 아래와 같습니다.

Function 특지구분(범위 As Range)
    '범위(주소)에서 특지구분을 추출한다.
    
    Dim 마지막공백 As Integer
    Dim 지번 As String
    
    마지막공백 = InStrRev(범위, " ")
    
    If Mid(범위, 마지막공백 - 1, 1) = "산" Then
        마지막공백 = InStrRev(범위, " ", 마지막공백 - 1)
    End If
    
    지번 = Mid(범위, 마지막공백 + 1)
    
    If Left(지번, 1) = "산" Then
        특지구분 = "산"
    Else
        특지구분 = "일반"
    End If
End Function

 

지번을 구하는 부분 전까지는 같습니다.

 

    지번 = Mid(범위, 마지막공백 + 1)

 

지번은 범위에서 마지막 공백에 1을 더한 위치부터 문자열을 가져오는데, 엑셀의 경우는 가져올 문자의 개수를 지정해야 하는데, VBA에서는 그럴 필요가 없습니다.

 

    If Left(지번, 1) = "산" Then
        특지구분 = "산"
    Else
        특지구분 = "일반"
    End If

 

지번에는 왼쪽 첫 글자가 '산'이면 특지구분은 '산'이고, 아니면 '일반'을 특지구분에 대입해서 반환합니다.

 

엑셀로 돌아가서, 이제 C2셀에

=특지구분(A2)라고 입력하면

'산'과 '일반'이 모두 맞게 구해졌습니다.

 

 

6. 본번 구하기

본번은 '산'의 위치에 따라 '산'이 있으면 그다음부터가 본번과 부번인데,

-(하이픈)이 있더라도 value함수를 적용하면 본번만 반환되므로 아래와 같이 구하면 됩니다.

    If Left(지번, 1) = "산" Then
        본번 = Val(Mid(지번, 2))
    Else
        본번 = Val(Mid(지번, 1))
    End If

 

D2 셀에 =본번(a2)라고 입력하고 채우기 핸들을 더블 클릭하면

A2셀에 하이픈이 있지만 본번 111이 잘 구해지고, A6셀과 같이 하이픈이 없더라도 302가 잘 구해졌습니다.

 

7. 부번 구하기

본번을 구할 때는 하이픈의 위치를 알아야 합니다.

 

따라서, 지번에서 하이픈의 위치를 찾아 있으면 그다음부터가 부번이고,

아니면 공백("")으로 처리하도록 하면 됩니다.

 

    Dim 하이픈위치 As Integer
    
    부번 = ""
    하이픈위치 = WorksheetFunction.Max(InStr(1, 범위, "ㅡ"), InStr(1, 범위, "-"))

 

부번의 초기값을 공백("")으로 대입했고,

하이픈위치를 구하는데, -인 경우도 있고, 가끔 ㅡ라는 기호를 사용하는 경우가 있어, 둘 다 처리가 가능하도록 instr 함수를 두 번 사용했고, 최댓값을 대입하는데,

Max 함수가 VBA에는 없어서 앞에 WorksheetFunction.를 붙여서 워크시트 함수라는 것을 명시해야 합니다.

 

    If 하이픈위치 > 0 Then
        부번 = Val(Mid(범위, 하이픈위치 + 1))
    End If

 

하이픈위치가 0보다 크면 하이픈위치+1부터 끝까지가 부번이 되고,

아니면 초기값 공백이 그대로 유지되므로 공백이 반환됩니다.

 

E2셀에 =부번(a2)라고 입력하고 채우기 핸들을 더블 클릭하면

부번이 있을 때는 부번이 표시되고, 없을 때는 공백으로 표시가 잘 됩니다.

 

8. 함수명이 한글인 경우 단점

 

한글로 입력하면 아래에 그 글자로 시작하는 함수목록이 표시되지 않는 불편함이 있습니다. 

 

함수명과 반환값의 변수를 영어 bubun으로 모두 바꾼 다음

 

=bu까지 입력하면 bubun이란 함수명이 표시되므로 입력하기 편합니다.

 

 

여기서는 설명 목적이므로 bubun을 다시 '부번'으로 돌려놓겠습니다.

 

9. 엑셀 추가 기능 파일

함수는 엑셀 추가 기능 파일(*.xlam)로 저장하는 것이 어느 파일에서든 사용할 수 있으므로 편리하면

기존에 xlam 파일이 있다면 여기에 추가하는 것이 바람직합니다.

 

PNU만들기(주소분리)(특지구분,본번,부번).xlsm
0.02MB

반응형