把年月数变成月数,很简单。但只有脑回路大的人才可能写出更简单的公式。通常,思路越简单公式越长。案例中巧用RIGHTB提取位于双字节后,字节变化幅度在1以内的单字节数据的思路大家可以多多借鉴。 要求:把工龄x年x月换成以月为单位的数量。没有入职日期。好像很简单,年数*12+月数就是结果。各位可写出公式后阅读,看看能否碰出火花来。=IFERROR(LEFT(F2,FIND("年",F2)-1)*12,0)+IFERROR(MID(F2,IFERROR(FIND("年",F2)+1,1),FIND("个",F2)-IFERROR(FIND("年",F2)+1,1)),0) 为了满足只有年和只有月的情况,公式用了4次IFERROR函数。扫码加入学习微信群,下载Excel课件,同步操作练习。=IFERROR(LEFT(F2,FIND("年",F2)-1)*12,0)+IFERROR(--RIGHTB(LEFT(F2,LEN(F2)-2),2),) 转个弯思路——去掉最后两字,月数位于双字节文字后,在最右的2字节内,字节幅度变化在1以内。LEFT(F2,LEN(F2)-2)把最右边两个字去掉,再用RIGHTB取右边的两个字节就得到了月数。=TEXTBEFORE(F2,"年",,,,0)*12+RIGHTB(TEXTBEFORE(F2,"个",,,,0),2)=LOOKUP(9^9,SUBSTITUTE(SUBSTITUTE({"","0年"}&F2,"年"," "),"个月","/12")*12) 颠覆性思路——把含月的工龄,如4年11个月,的月份计算“4*12+11”变成带分数计算“(4 11/12)*12;整年的计算保持不变。③继续用SUBSTITUTE将“个月”替换成/12。首先是带分数计算。如“4 11/12”“0 8/12”,整数+空格+分数,它们是带分数,*12分别得到月份59、8。其次是纯分数表示的日期计算。如“3/12”,被默认为日期,*12得到一个较大的数539964。最后是文本计算。如“0 4 11/12”“0 5”,*12会返回错误值。⑤用LOOKUP在每行中查找一个极大的数,得到不为错误值的最右侧的一个数。LOOKUP查找规则见文末推荐。
|