반응형
주민등록 번호 함수 만들기
주민번호 마스킹/나이/성별/고향의 정보로 표시하는 함수 생성
Function 주민번호(대상셀 As Range, Optional 모드 As Integer = -1) As Variant
Dim 번호 As String
Dim 생년 As Integer, 생월 As Integer, 생일 As Integer
Dim 성별코드 As Integer, 지역코드 As Integer
Dim 현재 As Date, 생일날짜 As Date
Dim 나이 As Integer
Dim 성별 As String, 지역 As String
On Error GoTo 오류처리
번호 = Replace(Trim(CStr(대상셀.Value)), "-", "")
If Len(번호) <> 13 Or Not IsNumeric(번호) Then
주민번호 = "잘못된 형식"
Exit Function
End If
' 생년월일 및 코드 추출
생년 = Val(Left(번호, 2))
생월 = Val(Mid(번호, 3, 2))
생일 = Val(Mid(번호, 5, 2))
성별코드 = Val(Mid(번호, 7, 1))
지역코드 = Val(Mid(번호, 8, 2))
' 연도 보정
Select Case 성별코드
Case 1, 2, 5, 6: 생년 = 1900 + 생년
Case 3, 4, 7, 8: 생년 = 2000 + 생년
Case Else
주민번호 = "잘못된 성별코드"
Exit Function
End Select
' 생일 유효성 검사
If Not IsDate(DateSerial(생년, 생월, 생일)) Then
주민번호 = "잘못된 생년월일"
Exit Function
End If
생일날짜 = DateSerial(생년, 생월, 생일)
현재 = Date
' 만나이 계산
나이 = Year(현재) - Year(생일날짜)
If Month(현재) < Month(생일날짜) Or (Month(현재) = Month(생일날짜) And Day(현재) < Day(생일날짜)) Then
나이 = 나이 - 1
End If
' 성별
Select Case 성별코드
Case 1, 3, 5, 7: 성별 = "남"
Case 2, 4, 6, 8: 성별 = "여"
Case Else: 성별 = "알수없음"
End Select
' 지역 추정
Select Case 지역코드
Case 0 To 8: 지역 = "서울"
Case 9 To 12: 지역 = "부산"
Case 13 To 15: 지역 = "인천"
Case 16 To 25: 지역 = "경기"
Case 26 To 34: 지역 = "강원"
Case 35 To 39: 지역 = "충북"
Case 40 To 41: 지역 = "대전"
Case 42 To 47: 지역 = "충남"
Case 48 To 54: 지역 = "전북"
Case 55 To 66: 지역 = "전남"
Case 67 To 69: 지역 = "대구"
Case 70 To 81: 지역 = "경북"
Case 82 To 84: 지역 = "경남"
Case 85: 지역 = "울산"
Case 86 To 91: 지역 = "경남"
Case 92 To 95: 지역 = "제주"
Case 96: 지역 = "세종"
Case 97 To 99: 지역 = "불명"
Case Else: 지역 = "알수없음"
End Select
' 출력 모드별 결과 반환
Select Case 모드
Case 0
주민번호 = Left(번호, 6) & "-" & Mid(번호, 7, 1) & "******"
Case 1
주민번호 = 나이
Case 2
주민번호 = 성별
Case 3
주민번호 = 지역
Case Else
주민번호 = 나이 & "세/" & 성별 & "/" & 지역
End Select
Exit Function
오류처리:
주민번호 = "유효하지 않은 번호"
End Function
Tip. 2020년 10월 이후는 고향 정보가 삭제 됨
입력값 (000101-1010000) | 출 력 값 |
=주민번호(셀,0) | 000101-1****** |
=주민번호(셀,1) | 125 |
=주민번호(셀,2) | 남 |
=주민번호(셀,3) | 서울 |
함수로 만들려면,
0 | =IF(LEN(SUBSTITUTE(A1,"-",""))=13, LEFT(SUBSTITUTE(A1,"-",""),6) & "-" & MID(SUBSTITUTE(A1,"-",""),7,1) & "******", "형식오류") |
1 | =IF(LEN(SUBSTITUTE(A1,"-",""))=13, LET( ssn, SUBSTITUTE(A1,"-",""), yy, MID(ssn,1,2), mm, MID(ssn,3,2), dd, MID(ssn,5,2), gender, MID(ssn,7,1), yearPrefix, IF(gender=1,"19", IF(gender=2,"19", IF(gender=3,"20", IF(gender=4,"20", "19")))), birthYear, yearPrefix & yy, birthDate, DATE(birthYear, mm, dd), today, TODAY(), age, YEAR(today) - YEAR(birthDate) - IF(TODAY()<DATE(YEAR(today), MONTH(birthDate), DAY(birthDate)), 1, 0), age ), "형식오류") |
2 | =IF(LEN(SUBSTITUTE(A1,"-",""))=13, IF(ISNUMBER(FIND(MID(SUBSTITUTE(A1,"-",""),7,1),"1357")),"남","여"), "형식오류") |
3 |
반응형
'침실3_EXCEL' 카테고리의 다른 글
[EXCEL] 파일이름 셀에 표시하기. (0) | 2025.05.04 |
---|---|
[EXCEL] 시트 이름을 셀에 표시하기 (0) | 2025.04.27 |
[EXCEL] 선택상자(목록 선택) 만들기 (0) | 2025.04.22 |
EXCEL 단축키 (0) | 2025.04.16 |
엑셀-사용자 지정 셀서식 (0) | 2024.08.25 |
엑셀 자동 계산 안될 때 (0) | 2024.06.30 |
EXCEL 함수-COUNT, COUNTA, COUNTBLANK (0) | 2024.06.23 |
EXCEL 함수-Large, Small (0) | 2024.06.16 |
EXCEL- 이름 충돌 제거 VBA (0) | 2024.06.09 |
파워포인트- 폰트 포함 저장 (0) | 2023.06.11 |