如何生成序号_五个序号技巧,还不会的打屁屁

序号对于大家来说都不会陌生,今天咱们就一起聊聊序号那些事儿。

d6bd9af8870528d57ed047c8403eba12.png

上面这个图中的A列,就是咱们经常看到的序号形式之一。 有朋友会说,这很简单啊,就是一些数字的罗列而已。 但在实际工作当中,远不止数字罗列这么简单。咱们经常会遇到不同样式的序号排列要求,比如说:按部门填写序号、筛选后填写序号、不连续的数据填写序号等等。 1、生成常规序号 一般咱们填写序号,只要在第一个单元格内输入数字1,然后按住单元格右下角的填充柄向下拖动,然后在【填充选项】中选择【序列填充】就可以了:

fc6e0d506a825005537db1be0312c0af.png

如果相邻列已经输入了内容,可以分别输入1、2,然后选中两个单元格,双击单元格右下角的填充柄,就可以快速完成序号的填充。

99458429a1e444ba5ab4b5b9058574ad.png

如果相邻列没有输入内容,而我们需要生成的序号又非常多,是不是就要一拖到底了呢? 当然不是的。 假如说要在A列生成1至10000的连续序号,可以先在A1单元格输入数字1,然后在名称框内输入“A1:A10000”,按Enter键。

eb8335f32d31f80b18f8359ffb0b1907.png

接下来依次单击【开始】→【填充】→【序列】,在【序列】对话框中,终止值输入10000,单击【确定】。就可以快速的生成1至10000的连续序号了。

eefd2fa47340dbd73798c30811569c11.png

2、按部门添加序号 以下图为例,要求按部门单独填写序号,不同部门都要从1开始编号,按顺序递增。

3d15e4a994792072543cd8d510723675.png

A2单元格输入以下公式,向下复制: =COUNTIF(B$2:B2,B2) COUNTIF函数对区域中满足单个指定条件的单元格进行计数。 第一参数B$2:B2中的B$2是行绝对引用,在公式向下复制时,就会变成下面这样不断扩大的引用区域: COUNTIF(B$2:B3,B3) COUNTIF(B$2:B4,B4) COUNTIF(B$2:B5,B5)…… 也就是统计自B2单元格开始,到公式所在行的这个区域内,有多少个与B列内容相同的单元格。 3、筛选后保持连续的序号 如果按常规方法输入序号后,一旦数据经过筛选,序号就会发生错乱。 如何处理才能使序号在筛选后也能保持连续呢? A2单元格输入以下公式向下复制: =SUBTOTAL(3,B$1:B2)-1 这时候再进行筛选,序号就始终保持连续了。

1c0f6214e82b53902aa54e9d03476673.png

SUBTOTAL函数只统计可见单元格的内容,通过给定不同的第一参数,可以完成计数、求和、平均值、乘积等等多种汇总方式。 在本例中,第一参数是3,就是告诉SUBTOTAL函数要执行的汇总方式是COUNTA。 COUNTA函数用于计算区域中非空单元格的个数。 SUBTOTAL(3,区域)就是计算区域中可见非空单元格的个数。 第二参数B$1:B2的B$1使用了行绝对引用,当公式向下复制时会变成 B$1:B3、B$1:B4、B$1:B5…… 也就是在这样一个逐行递增的引用区域中,统计可见非空单元格的个数。 注意这里有一个问题,A2单元格的公式如果使用下面的公式: =SUBTOTAL(3,B$2:B2) 这样虽然在筛选时虽然序号没有问题了,但是在 工作表中使用了SUBTOTAL函数后,Excel会默认把最后一行作为汇总行,所以会始终显示,因此影响到筛选操作了。 我们只要记得在处理序号时,需要将SUBTOTAL函数的第二参数引用起始位置写成公式所在行的上一行,再将结果减1就可以了。 4、生成间断的序号 在下图示的数据表中,会不规律的出现一些空行,要求我们在生成序号的时候自小到大排列,但是空行不显示内容。

84585311e8f2026bc382461a56d0c5c3.png

A2单元格输入以下公式,向下复制: =IF(B2="","",MAX(A$1:A1)+1) 先判断B2是否为空值,如果B2是空值则返回空,否则计算当前单元格以上的区域中的最大值,加1后得到新的序号。 5、 合并单元格添加序号 使 用COUNTA函数,能够实现对带有合并单元格的表格快速添加序号。 同时选中A2:A13单元格区域,编辑栏输入公式,按Ctrl+回车: =COUNTA(B$2:B2)

7f4948beddd97a8f8bae428d41d0ce85.gif

好啦,今天的内容就这些吧,祝各位小伙伴们一天好心情。 图文制作:祝洪忠
public synchronized String nextId() { long timestamp = timeGen(); //获取当前毫秒数 //如果服务器时间有问题(时钟后退) 报错。 if (timestamp < lastTimestamp) { throw new RuntimeException(String.format( "Clock moved backwards. Refusing to generate id for %d milliseconds", lastTimestamp - timestamp)); } //如果上次生成时间和当前时间相同,在同一毫秒内 if (lastTimestamp == timestamp) { //sequence自增,因为sequence只有12bit,所以和sequenceMask相与一下,去掉高位 sequence = (sequence + 1) & sequenceMask; //判断是否溢出,也就是每毫秒内超过4095,当为4096时,与sequenceMask相与,sequence就等于0 if (sequence == 0) { timestamp = tilNextMillis(lastTimestamp); //自旋等待到下一毫秒 } } else { sequence = 0L; //如果和上次生成时间不同,重置sequence,就是下一毫秒开始,sequence计数重新从0开始累加 } lastTimestamp = timestamp; long suffix = (datacenterId << datacenterIdShift) | (workerId << workerIdShift) | sequence; String datePrefix = DateFormatUtils.format(timestamp, "yyyyMMddHHMMssSSS"); return datePrefix + suffix; } protected long tilNextMillis(long lastTimestamp) { long timestamp = timeGen(); while (timestamp <= lastTimestamp) { timestamp = timeGen(); } return timestamp; } protected long timeGen() { return System.currentTimeMillis(); } private byte getLastIP(){ byte lastip = 0; try{ InetAddress ip = InetAddress.getLocalHost(); byte[] ipByte = ip.getAddress(); lastip = ipByte[ipByte.length - 1]; } catch (UnknownHostException e) { e.printStackTrace(); } return lastip; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值