2024.05.15 - [EXCEL - VBA] - 소재지, 특지구분, 본번, 부번 합치기(2) - VBA
위 글에서 매크로로 소재지, 특지 구분, 본번, 부번을 결합하는 것을 해봤는데,
이번에는 사용자 지정 함수를 만들어 보겠습니다.
(영어로 User-Defined Function이므로 '사용자 정의 함수'라고 하는 것이 맞을 듯한데, 엑셀에서는 사용자 지정 함수라는 용어를 사용하네요)
1. 로직
로직은 매크로나 같습니다.
특지 구분에 '산'이 있으면 소재지 다음에 공백 한 칸과 '산'을 결합하고, 없으면 빈칸으로 처리하고,
부번이 있으면 본번과 부번을 하이픈(-)으로 연결하고 없으면 본번만 표시하는 것입니다.
그런데 사용자 지정 함수에서는 이에 더해 옵션을 줘서 '산' 다음에 공백 한 칸을 둘 것인지를 지정할 수 있도록 하겠습니다.
2. 코드
사용자 지정 함수의 코드는 아래와 같습니다.
Function To_Addr(rngA As Range, Optional spYN As Boolean = False)
'소재지, 특지, 본번, 부번이 연속된 범위 4개를 지정해서 주소로 합치고,
'spYn를 옵션으로 둬서 True이면 '산'다음에 공백 한 칸을 추가함
If Trim(Trim(rngA(1, 2))) = "산" Then
If spYN = True Then
To_Addr = Trim(rngA(1, 1)) & " " & Trim(rngA(1, 2)) & " "
Else
To_Addr = Trim(rngA(1, 1)) & " " & Trim(rngA(1, 2))
End If
Else
To_Addr = Trim(rngA(1, 1)) & " "
End If
If Val(rngA(1, 4)) Then
To_Addr = To_Addr & Trim(rngA(1, 3)) & "-" & Trim(rngA(1, 4))
Else
To_Addr = To_Addr & Trim(rngA(1, 3))
End If
End Function
파일은 아래와 같습니다.
그러나, 엑셀 추가 기능(*.xlam) 형식을 선택한 후
저장하고(자동으로 AddIns 폴더에 저장됨),
※ 파일명이 너무 길므로 짧게 영어로 지정하는 것이 좋음
개발 도구 - Excel 추가 기능을 누른 후 목록 중에서 '지번 주소 결합 사용자 정의 함수'에 체크하고 확인 버튼을 누르는 것이 좋습니다.
그러면 어떤 엑셀 파일을 열던지 to_addr 사용자 지정 함수를 사용할 수 있습니다.
3. 코드 간단한 설명
가. Function으로 시작해서 End Function으로 끝남
나. Function 다음에 사용자 지정 함수 명을 적고, 괄호 안에 인수를 지정하는데 형식을 같이 지정
Function To_Addr(rngA As Range, Optional spYN As Boolean = False) |
여기서 사용자 지정 함수명은 To_Addr이고,
인수는 rngA와 spYN 2개이며,
형식은 Range(범위)와 Boolean(참 또는 거짓)입니다.
다. 옵션은 인수의 마지막 위치에 기입하고 기본 값 지정 가능
Optional spYN As Boolean = False |
spYN의 기본값이 False, 거짓이므로 '산' 다음에 공백을 추가하지 않습니다.
라. 주석은 '(작은따옴표) 다음에 기입함
'소재지, 특지, 본번, 부번이 연속된 범위 4개를 지정해서 주소로 합치고, 'spYn를 옵션으로 둬서 True이면 '산'다음에 공백 한 칸을 추가함 |
위 내용은 함수에 대한 간단한 설명입니다.
마. 특지 구분 처리 부분
If Trim(Trim(rngA(1, 2))) = "산" Then If spYN = True Then To_Addr = Trim(rngA(1, 1)) & " " & Trim(rngA(1, 2)) & " " Else To_Addr = Trim(rngA(1, 1)) & " " & Trim(rngA(1, 2)) End If Else To_Addr = Trim(rngA(1, 1)) & " " End If |
If Trim(Trim(rngA(1, 2))) = "산" Then
If spYN = True Then
=> 지정된 범위의 두 번째 셀이 '산'이고, spYN이 True이면
To_Addr = Trim(rngA(1, 1)) & " " & Trim(rngA(1, 2)) & " "
=> To_Addr란 반환 값에 rngA 범위에서 첫 번째 셀 값인 '소재지'의 좌우 공백을 제거한 후, 한 칸 공백을 추가하고, '산'을 추가한 후 다시 공백 한 칸을 추가함.
이렇게 엑셀 VBA에서는 사용자 지정 함수의 반환 값을 지정할 때 사용자 지정 함수명을 사용합니다.
Else
To_Addr = Trim(rngA(1, 1)) & " " & Trim(rngA(1, 2))
End If
=> '산'인데 spYN이 False이면 소재지에 공백 한 칸을 추가한 다음 '산'을 결합하고, '산' 다음에 공백을 추가하지 않습니다.
Else
To_Addr = Trim(rngA(1, 1)) & " "
End If
=> '산'이 아닌 경우는 소재지에 공백 한 칸만 추가합니다.
바. 본번과 부번 처리 부분
If Val(rngA(1, 4)) Then To_Addr = To_Addr & Trim(rngA(1, 3)) & "-" & Trim(rngA(1, 4)) Else To_Addr = To_Addr & Trim(rngA(1, 3)) End If |
네 번째 셀인 부번의 값이 0보다 큰 경우(0이 False이며, 양수는 모두 True 이므로 Val(rngA(1, 4)) 다음에 "> 0" 입력 불필요)는
위에서 구한 소재지와 특지 구분 결합 값에
세 번째 값인 본번과 네 번째 값인 부번을 하이픈으로 연결한 값을 추가하고,
0인 경우, 다시 말해 부번이 없는 경우는 위에서 구한 소재지와 특지 구분 결합 값에
본번만 추가해서 반환합니다.
4. 한 파일에 여러 개 사용자 지정 함수 추가
엑셀 추가 기능 파일(*.xlam)에 사용자 지정 함수를 만들어 계속 추가할 수 있습니다.
아래는 To_Addr 함수 아래에 eval 사용자 지정 함수를 추가한 예입니다.
Function To_Addr(rngA As Range, Optional spYN As Boolean = False)
(처리 구문1)
End Function
Function eval(aRange As Range)
(처리 구문2)
End Function
Function To_Addr(rngA As Range, Optional spYN As Boolean = False)
'소재지, 특지, 본번, 부번이 연속된 범위 4개를 지정해서 주소로 합치고,
'spYn를 옵션으로 둬서 True이면 '산'다음에 공백 한 칸을 추가함
If Trim(Trim(rngA(1, 2))) = "산" Then
If spYN = True Then
To_Addr = Trim(rngA(1, 1)) & " " & Trim(rngA(1, 2)) & " "
Else
To_Addr = Trim(rngA(1, 1)) & " " & Trim(rngA(1, 2))
End If
Else
To_Addr = Trim(rngA(1, 1)) & " "
End If
If Val(rngA(1, 4)) Then
To_Addr = To_Addr & Trim(rngA(1, 3)) & "-" & Trim(rngA(1, 4))
Else
To_Addr = To_Addr & Trim(rngA(1, 3))
End If
End Function
Function eval(aRange As Range)
eval = Evaluate(aRange.Value)
End Function
'EXCEL - VBA' 카테고리의 다른 글
VBA - vworld 사이트에서 토지 특성 조회(6) : 디버깅 (0) | 2025.03.17 |
---|---|
VBA - vworld 사이트에서 토지 특성 조회(5) : 코드 설명(2) (0) | 2025.03.14 |
VBA - vworld 사이트에서 토지 특성 조회(4) : 코드 설명(1) (0) | 2025.03.13 |
VBA - vworld 사이트에서 토지 특성 조회(3) : 코드 (0) | 2025.03.12 |
VBA - vworld 사이트에서 토지 특성 조회(2) : 도구 - 참조에서 XML v6.0 추가 (0) | 2025.03.11 |