在EXCEl的实际运用中,经常会遇到编号的问题。比如小Z童鞋在最近的工作中遇到了这样一个问题,单位发布公文,给公文编号。由于公文有不同的类型,编号由于类型不同,所以没有绝对的联系,每次编号,都得回看上次的编号位置,如图:
按照单位要求,公文编号人事为1,综合为2,后勤为3,然后各自按顺序编号,小Z童鞋就在思考,可否让EXCEL自动编号呢?
我们分析一下编号,2018213,前4位是当前的年份,第5位是公文类型,6和7位是公文编号。这里我们可以利用文本连接符”&”,以及IF判断还有COUNGIF计数来进行综合完成。
首先我们利用数据验证,完成公文的类型选择,操作如下:
新建一个工作表,输入公文类型:
然后在主表中,进行数据验证设置:
在弹出的属性窗口中操作如下:
我们可以看到,在主表的类型列,已经产生变化:
就只能做如下选择,当然,如果公文类型后面有新增,可以在公文类型里面增加和修改。
重头戏来了,如何编号呢?
前四位数字我们可以用文本直接进行,因为每年修改一次,几乎没有工作量:
所以公式第一部分应该是:
“2018”&
公文类型判断可以用到IFS条件函数:
人事为1,后勤为2,综合为3,其他为4,可以这样来写:
IFS(A2=”人事”,1,A2=”后勤”,2,A2=”综合”,3,A2=”其他”,4)
这个公式能看懂吗?
两者连接:
=”2018″& IFS(A2=”人事”,1,A2=”后勤”,2,A2=”综合”,3,A2=”其他”,4)
我们放到excel里面看一下:
已经满足年份和对应类型编号了,最后就是顺序编号。我们来看一下编号的依据,是根据同一类型顺序编号。我们换一个思考方式,就是计算这列之上还有多少个相同类型,比如这列前面已经出现了10个人事公文,那么这一列的编号就是11。
所以我们就要用到countif,理解了就很简单,公式也很简单:
countif($A$2:A2,A2)
是不是看着有点晕,全是A2。没关系,我们来捋一捋:
Countif(范围,条件),$A$2:A2是范围,注意绝对引用和相对引用:从绝对的A2单元格开始,到相对的当前单元格,只不过此时是A2,需要仔细想一下。然后当前的条件是A2,在$A$2:A2范围内查找计数。
可能还是很复杂,我们看下一个单元格更容易理解,如果在B3单元格:
Countif($A$2:A3,A3)
是不是就容易弄错了,A3的条件到A2:A3中去查找个数。
最后我们考虑编号留余的问题,也就是留0的问题。
如果是个位数,补足两个0,如果是双位数,补足一个0,如果百位数,则不用0补足。
如何判断呢?这里我们来用countif的计数结果来除以10或者100来判断:
If(Countif($A$2:A2,A2)/10<1,”00”,if(Countif($A$2:A2,A2)/10<10,”0”,””))
大家能看懂这个公式吗?
我们从最外层解释:
判断条件1:Countif($A$2:A2,A2)/10<1 (countif的计数是否是个位数)
条件为真: 用00补足
条件为假: 进一步判断if(Countif($A$2:A2,A2)/10<10,”0”,””)
条件2: Countif($A$2:A2,A2)/10<10 (countif的计数是否为两位数)
条件为真:用0补足
条件为假:不用0 (因为已经是三位数了)
我们把公式完整连接起来:
=”2018″&IFS(A2=”人事”,1,A2=”后勤”,2,A2=”综合”,3,A2=”其他”,4)& If(countif($A$2:A2,A2)/10<1,”00”,if(Countif($A$2:A2,A2)/10<10,”0”,””))& countif($A$2:A2,A2)
我们还是放到excel里面看一下结果:
至少B2单元格正确显示,我们把B列单元格往下拖动:
我们看到相应的类型和编号都已经正确了,达到我们预期的要求,包括A14单元格,第10个人事文件,他的对应B2编号,也顺利识别。为了美化,其实还可以在用一次if判断,如果类型是空值,编号B列对应单元格也是空值。这里不再赘述。
好了,是不是已经达到要求了呢。今天的内容主要是综合性较强,大家要好好理解一下。Excel其实功能很强大哦!!