應(yīng)用場景 根據(jù)身份證號碼獲取年齡、生日或性別任一信息 知識要點 1:開發(fā)一個名為 SFZ的函數(shù),第一個參數(shù)為必選參數(shù),用于引用身份證號碼存放的單元格,第二個參數(shù)為可選參數(shù),用于指定信息的類型,包括年齡(NL)、生日(SR)、和性別(XB) 2:UCase 函數(shù) 包含轉(zhuǎn)成大寫的字符串 只有小寫的字母會轉(zhuǎn)成大寫;原本大寫或非字母之字符保持不變 3:DateSerial 函數(shù) 返回包含指定的年、月、日的 Variant (Date)。文本轉(zhuǎn)換為日期格式 4:DATEDIF函數(shù)是Excel隱藏函數(shù) 返回兩個日期之間的年\月\日間隔數(shù) Function SFZ(Cell As Range, Optional Options As String = 'XB') As String Application.Volatile '聲明為易失性函數(shù) Dim Temp As String If Len(Cell) = 0 Then SFZ = '': Exit Function '如果單元格引用空白,則返回空白且終止函數(shù)過程 '如果引用單元格長度不是15或者18 則返回空白,且終止過程 If Len(Cell.Text) <> 15 And Len(Cell.Text) <> 18 Then SFZ = '': Exit Function '如果第二參數(shù)為空文本,或者不等于NL\SR\XB則函數(shù)返回空文本,同時退出函數(shù)過程 Ucase ,將字符串轉(zhuǎn)為大寫 If Options = '' Or (UCase(Options) <> 'NL' And UCase(Options) <> 'SR' And UCase(Options) <> 'XB') Then SFZ = '': Exit Function '如果第二參數(shù)為XB,那么通過iif函數(shù)配合MOD函數(shù),判斷表示身份證的哪一位是否為奇數(shù),是奇數(shù)則返回女 If UCase(Options) = 'XB' Then SFZ = IIf((Mid(Cell.Text, 15, 3) Mod 2), '男', '女'): Exit Function '如果身份證號碼是15位,而且第七位數(shù)是0,那么使用20連接第七位開始的6位數(shù),且使用 “-”作為年月日的分割符 If Len(Cell.Text) = 15 And Mid(Cell.Text, 7, 1) = 0 Then SFZ = '20' & Mid(Cell.Text, 7, 2) & '-' & Mid(Cell.Text, 9, 2) & '-' & Mid(Cell.Text, 11, 2) '如果身份證號碼是15位,而且第七位數(shù)大于0,那么使用20連接第七位開始的6位數(shù),且使用 “-”作為年月日的分割符 If Len(Cell.Text) = 15 And Mid(Cell.Text, 7, 1) > 0 Then SFZ = '19' & Mid(Cell.Text, 7, 2) & '-' & Mid(Cell.Text, 9, 2) & '-' & Mid(Cell.Text, 11, 2) '如果身份證號碼是18位,從第七位開始取8位數(shù),且使用 “-”作為年月日的分割符 If Len(Cell.Text) = 18 Then SFZ = Mid(Cell.Text, 7, 4) & '-' & Mid(Cell.Text, 11, 2) & '-' & Mid(Cell.Text, 13, 2) If UCase(Options) = 'NL' Then Dim Dat As Date Dat = DateSerial(Split(SFZ, '-')(0), Split(SFZ, '-')(1), Split(SFZ, '-')(2)) '將前面取出的文本轉(zhuǎn)換為日期格式 '利用公式計算兩個日期的間隔年數(shù) SFZ = Evaluate('datedif(' & Dat * 1 & ',NOW(),' & '''Y''' & ') ') End If End Function |
|