用一个单元格判断所有情况公式长度将会超过限制。
建议添加4个辅助列(假定为JKLM)来判断,J列用来判断18位身份证日期是否合法,公式如下:
=IF(AND(LEN(B1)<>18,LEN(B1)<>15),"身份证位数不对",IF(LEN(B1)=18,IF(OR(YEAR(DATE(1*(MID(B1,7,4)),1*(MID(B1,11,2)),1*(MID(B1,13,2))))<>1*(MID(B1,7,4)),MONTH(DATE(1*(MID(B1,7,4)),1*(MID(B1,11,2)),1*(MID(B1,13,2))))<>1*(MID(B1,11,2)),DAY(DATE(1*(MID(B1,7,4)),1*(MID(B1,11,2)),1*(MID(B1,13,2))))<>1*(MID(B1,13,2))),"日期有误",0),0))
K列用来判断15位身份证日期是否合法:
=IF(AND(LEN(B1)<>18,LEN(B1)<>15),"身份证位数不对",IF(LEN(B1)=15,IF(OR(YEAR(DATE(1*(MID(B1,7,2))+1900,1*(MID(B1,9,2)),1*(MID(B1,11,2))))<>1*(MID(B1,7,2))+1900,MONTH(DATE(1*(MID(B1,7,2))+1900,1*(MID(B1,9,2)),1*(MID(B1,11,2))))<>1*(MID(B1,9,2)),DAY(DATE(1*(MID(B1,7,2))+1900,1*(MID(B1,9,2)),1*(MID(B1,11,2))))<>1*(MID(B1,11,2))),"日期有误",0),0))
L列用来判断日期是否超出范围:
=IF(AND(LEN(B1)<>18,LEN(B1)<>15),"身份证位数不对",IF(LEN(B1)=18,IF(OR(DATE(1*(MID(B1,7,4)),1*(MID(B1,11,2)),1*(MID(B1,13,2)))<DATE(YEAR(TODAY())-100,MONTH(TODAY()),DAY(TODAY())),DATE(1*(MID(B1,7,4)),1*(MID(B1,11,2)),1*(MID(B1,13,2)))>TODAY()),"日期超范围",0),IF(DATE(1*(MID(B1,7,2))+1900,1*(MID(B1,9,2)),1*(MID(B1,11,2)))<DATE(YEAR(TODAY())-100,MONTH(TODAY()),DAY(TODAY())),"日期超范围",0)))
M列综合前3列的情况,得到结果:
=IF(OR(J1:L1="身份证位数不对"),"身份证位数不对",IF(OR(J1:L1="日期有误"),"日期有误",IF(L1="日期超范围","日期超范围","")))
公式以Ctrl+Shift+Enter三键结束。
最后你再在B列设定用条件格式根据M列的情况给出不同的提示:
用鼠标选定B列,点"格式"->"条件格式",将条件1设为:
公式=M1="身份证位数不对"
点"格式"->"字体"->"颜色",选中红色,点"确定"。
点"添加",将条件2设为:
公式=M1="日期有误"
点"格式"->"字体"->"颜色",选中绿色,点"确定"。
点"添加",将条件3设为:
公式=M1="日期超范围"
点"格式"->"字体"->"颜色",选中蓝色,点两次"确定"。
这样B列字体为红色的表示"身份证位数不对",绿色的表示"日期有误",蓝色的表示"日期超范围"。
注:将几个辅助列的公式向下复制后,可将该几列隐藏。
温馨提示:答案为网友推荐,仅供参考