
PS,我是用office2003的excel完成這個(gè)操作的,office2000可能有些操作有些不同,不妨試一下。
首先先要說(shuō)幾個(gè)公式,明白了這幾個(gè)公式后,就能簡(jiǎn)單完成了。
?、俸瘮怠緇eft】
作用:提取數據左邊n個(gè)數字的內容
默認公式:=left(text, [num_chars])
翻譯公式:=left(數據,n[數字])
舉例:=left("Hello",2) 輸出結果為最開(kāi)始的2個(gè)字母“He”
?、诤瘮怠緍ight】
作用:提取數據右邊n個(gè)數字的內容
默認公式:=right(text, [num_chars])
翻譯公式:=right(數據,n[數字])
舉例:=right("Hello",2) 輸出結果為最末尾的2個(gè)字母“lo”
好了,利用這兩個(gè)公式,就可以做到簡(jiǎn)單的提取一個(gè)身份證號碼中的日期了。
舉例,某人身份證為310123190102039527(18位),輸入到"A1"單元格,建議用把單元格改成"文本",不然會(huì )顯示為科學(xué)計數法。
【單元格改成文本的方法:鼠標右擊"A1"單元格,選擇“設置單元格格式(F)...”,在“單元格格式”對話(huà)框中,選擇“數字”標簽,“分類(lèi)(C)”里選擇“文本”,點(diǎn)“確定”】
那用公式套用的話(huà),先用left吧,最后4位是不要的,所以提取左邊14位。這個(gè)身份證號碼已經(jīng)輸入到"A1"單元格,那么在"B1"單元格可以這樣輸入:=left(A1,14),那出現的結果就是“31012319010203”,然后你可以用right命令提取"B2"單元格里后8位數字,就可以提取出生日代碼了。比如我們在"C1"單元格里輸入=right(B1,8),出現的結果就是“19010203”,基本工程完成了。
接下來(lái)是進(jìn)階教程,其實(shí),完全可以把2個(gè)命令合并使用,比如,我們在"D1"單元格里這樣輸入:=right(left(A1,14),8),看看結果如何?是不是直接出現了正確結果?
其實(shí),如果left和right兩個(gè)命令同時(shí)用到,可以用一個(gè)更好的命令【mid】來(lái)代替,接下來(lái)我來(lái)說(shuō)一下mid的用法:
?、酆瘮怠緈id】
作用:提取數據,從左邊起第n個(gè)數字開(kāi)始,長(cháng)度為m的內容
默認公式:=mid(text, start_num, num_chars)
翻譯公式:=mid(數據,n[開(kāi)始第n位],m[長(cháng)度])
舉例:=mid("Hello",2,3) 輸出結果為從第二位開(kāi)始,長(cháng)度為3的字母“ell”
那樣,剛剛復雜的left和right嵌套,可以在"E1"單元格輸入公式=mid(A1,7,8)試試,就算出了正確的結果“19010203”
但是,又出現問(wèn)題了,這樣的日期,一個(gè)8位的數字,其實(shí)不是excel正式的日期格式,正式的日期格式應該為“1901-02-03”,那如何操作呢?
我的思路是這樣的,分別提取出“年”、“月”、“日”,然后利用公式把年月日連接起來(lái),就成為了正式的日期格式,接下來(lái)要引入第四個(gè)公式【date】
?、芎瘮怠綿ate】
作用:提取“年”、“月”、“日”,使其轉化成日期格式
默認公式:=date(year, month, day)
翻譯公式:=date(x[年],y[月],z[日])
舉例:=date(1901,02,03) 輸出結果為日期格式的“1901-2-3”
接下來(lái),按照如下操作提取出年月日:
提取年,在"F1"單元格輸入:=mid(A1,7,4),輸出結果為“1901”。
提取月,在"G1"單元格輸入:=mid(A1,11,2),輸出結果為“02”。
提取日,在"H1"單元格輸入:=mid(A1,13,2),輸出結果為“03”。
最后合并,在"H1"單元格輸入:=date(F1,G1,H1),看看輸出結果如何?其實(shí),這里也可以用date和mid的嵌套公式,=date(mid(A1,7,4),mid(A1,11,2),mid(A1,13,2))直接提取出日期。
不過(guò)又出現一個(gè)問(wèn)題,如果有些人的身份證號碼是15位的呢?那么如何處理呢?其實(shí)一樣的,15位身份證號碼生日只有從第7位開(kāi)始,6個(gè)數字,如果一口氣寫(xiě)成嵌套公式,就是=date(mid(單元格,7,2),mid(單元格,9,2),mid(單元格,11,2),比如我再舉例一個(gè)身份證號碼:310123010203952,把這個(gè)字符串輸入"A2"單元格(記得先把A2單元格轉換成文本格式),然后在B2單元格輸入=date(mid(A2,7,2),mid(A2,9,2),mid(A2,11,2))。其實(shí),date里面的數據是date(01,02,03),公式會(huì )自動(dòng)轉換成1901-2-3,其實(shí)這里涉及到一個(gè)千年蟲(chóng)問(wèn)題,其實(shí)現在已經(jīng)是2010年,如果你把2001年2月3日簡(jiǎn)寫(xiě)成01年2月3日,由date命令就會(huì )轉化成1901-2-3,以后在輸入中一定要注意。不過(guò)有點(diǎn)可以放心,老的15位身份證不可能出現在2000年以后,也就是它2位數的年份正好直接轉換成19XX,也不用多考慮,直接套用date公式。如果為了再?lài)乐斠恍?,確保日期為19XX年份的,可以在把公式改成=date("19"&mid(A2,7,2),mid(A2,9,2),mid(A2,11,2),這樣就強制是19XX年了。其實(shí)這里大可不必這樣做。
現在問(wèn)題又來(lái)了,如果我電腦里的數據,既有18位的,又有15位的,有什么辦法只用一個(gè)公式搞定它?答案是有的。這里又要引入一個(gè)判別函數【if】
?、莺瘮怠緄f】
作用:判別,如果成立,輸出公式/結果1;如果不成立,輸出公式/結果2
默認公式:=if(logical_test, [value_if_ture], [value_if_false])
翻譯公式:=if(判別式, 公式/結果1[判別式為真], 公式/結果2[判別式結果為假])
舉例1:=if(1+2=3,"答案正確","答案錯誤") 輸出結果“答案正確”【1+2=3,結果為真,所以輸出結果1】
舉例2:=if(false,"正確嗎?","錯誤嗎?") 輸出結果“錯誤嗎?”【false直接判別為假,所以輸出結果2】
舉例3:=if(0,"1是正確","0是錯誤") 輸出結果“0是錯誤”【0直接判別為假(其他數字例如1、2、3的結果都為真),所以輸出結果2】
說(shuō)個(gè)題外話(huà)if語(yǔ)句比較經(jīng)典,我多舉了幾個(gè)例子,我經(jīng)常用它來(lái)核對,比如有2列數字或者姓名,我要確保它們的位置一一對應,我就可以用if來(lái)判斷,比如這兩列分別是A列和B列,我在C1單元格輸入=if(A1=B1,"","X")然后選中C1單元格,鼠標按住這個(gè)單元格邊框右下角的小黑方塊往下拉(或者雙擊)可以直接判斷出A列和B列的數據是否一樣。
這里if怎么用呢?對了,就是先在判別式里判斷出身份證的長(cháng)度,對了,還要說(shuō)判斷長(cháng)度的公式【len】
?、藓瘮怠緇en】
作用:輸出結果為字符長(cháng)度
默認公式:=len(text)
翻譯公式:=len(數據)
舉例:=len("Hello") 輸出結果為“5”
那開(kāi)始用if語(yǔ)句來(lái)完成這個(gè)工作,比如我新建了一個(gè)表格,隨便輸入了如下4個(gè)身份證號碼
可以用LEN(A2)=18作為if語(yǔ)句的判別式,如果為真,輸出結果1,即18位身份證的提取公式date(mid(A2,7,4),mid(A2,11,2),mid(A2,13,2)),那在結果2中輸入15位的身份證判別式date(mid(A2,7,2),mid(A2,9,2),mid(A2,11,2))。寫(xiě)在"B2"單元格中,顯示出的結果為“9748”。這是為什么勒?因為B2單元格的“單元格格式”不對,鼠標右擊"B2"單元格,選擇“數字”標簽,“分類(lèi) (C)”中的“日期”,確定即可,結果就對了?!井斎?,如果你喜歡,你可以選擇比如“XXXX年XX月XX日”的格式,也可以只顯示年月等】
接下來(lái)就按住"B2"單元格右下角的小黑方塊往下拉(雙擊小方塊效果更好),結果就都出來(lái)了。
這里再展開(kāi)一下,為什么一開(kāi)始"B2"單元格輸出結果為9748呢?怎么說(shuō)呢?我只能用一種自己理解的非官方回答來(lái)說(shuō)明,其實(shí)你們看到單元格的日期是個(gè)假象,其實(shí)真正背后的內容是一個(gè)數字。不妨可以做個(gè)實(shí)驗,你隨便找個(gè)單元格,輸入數字“1”,然后修改“單元格格式”,改成“日期”格式,看到結果是什么?“1900-1-1”,就是說(shuō)數字“1”對應的日期是“1900-1-1”。然后,再輸入一個(gè)日期“9999-12-31”,這個(gè)日期是現有電腦能判斷出最“將來(lái)”的日期,然后修改“單元格格式”,改成“常規”,結果就是“2958465”,這就是日期格式的最大值和最小值。
而且經(jīng)過(guò)我的測試,存在小數點(diǎn)的數字也是可以轉換成日期的,小數點(diǎn)后的內容就是時(shí)間。例如“123.456”,轉化成日期格式【注:這里的日期格式要帶時(shí)間的】后輸出結果為“1900-5-2
另外,如果你輸入“0”,然后轉化成日期格式,是不成立的,“1900-1-0”這個(gè)數字自動(dòng)左對齊,也就是說(shuō)這個(gè)數據已經(jīng)成為了文本格式,默認日期格式是右對齊的。當然,你輸入類(lèi)似“1856-5-9”之類(lèi)的1900之前的日期格式,是死活不會(huì )轉變成日期格式的,只會(huì )默認成為文本格式,自動(dòng)左對齊。如果輸入“-1”再轉換成日期格式就更離譜了,輸出結果直接是“##########”。當然,超過(guò)最大值的“2958465”后一個(gè)數字“2958466”轉化成日期格式,也是輸出“##########”,不存在。
所以說(shuō),以前1999年面臨最大的問(wèn)題是“千年蟲(chóng)”問(wèn)題,可能到了2000年,日期顯示為1900年。不過(guò)現在都已經(jīng)解決了這個(gè)問(wèn)題。但是,在比較遠的未來(lái),將會(huì )遇到“萬(wàn)年蟲(chóng)”問(wèn)題,當然,這離我們很遙遠,那時(shí)候地球在不在還是個(gè)問(wèn)題,不過(guò)我感覺(jué),這個(gè)“萬(wàn)年蟲(chóng)”問(wèn)題可能比之前的“千年蟲(chóng)”問(wèn)題更嚴重,也許,那時(shí)候我們的身份證號碼要成為了19位也說(shuō)不定。
聯(lián)系客服