Excel 产生每两行空一行后累加1的编号

假设需要在A列产生自然数序列编号,从1开始,且每个两行空一行,即让每个组的成员之间产生一个空行,以便查看。

01 打开工作表,选中“A1”单元格,在其中输入公式:=IF(ROW()=1,1,IF(MOD(ROW(),3),COUNT(OFFSET(A$1,,,ROW()-1))+1,””))。

02 按下“Enter”键确认,公式将返回1。

03 用填充柄功能填充,在A列每两行空一行产生递加1的序列。

04 在编号右侧输入成员姓名即可。

alt

在本例中,需要对当前单元格前面的区域进行计数,而A1单元格前不存在单元格,OFFSET函数则会产生错误引用。此时利用IF函数配合ROW函数避开此问题,直接用IF函数为公式赋值,而不会计算OFFSET函数的引用了。

本例使用ROW函数判断当前行的行号,若等于1则返回1,对于其他行,当行号为3的整数倍数时,返回空白,相邻的下一行则从A1开始至当前行的上一行结束的区域中的数字个数加1。

小提示 本例还可以采用公式:=IF(ROW()=1,1,IF(MOD(ROW(),3),MAX(A$1:A1)+1,””)),此时公式直接对前一个非空白单元格递加1来完成。

Excel 查询抽查的产品编号地址

质检部门对市场或超市的产品进行质量抽查时,这个过程是随机的。

下面利用公式根据抽查产品的编号来统计该产品编号所在的单元格位置,具体操作如下。

01 打开工作表,输入一批产品的编号,并从中挑选出几个要抽查的产品编号。

02 选中“C3”单元格,在其中输入公式:=ADDRESS(3,1),按下“Enter”键确认,即可显示产品编号“B-T121”的单元格地址为“$A$5”。

03 按照上一步操作,在“C4”和“C5”单元格中输入计算地址的公式来确定其他抽查产品编号的地址,结果如图所示。

alt

Excel 可否根据职员编号计算职员能享受的年假天数?

某公司的职员编号中包含部门名称缩写、进厂日期和序号,编号效果如图7.128所示。

图7.128 职工信息表

其中,部门编号与部门名称的对应关系见表7.4。

表7.4 编号与部门对应关系表

现要求利用编号中的入厂日期计算每个职工的年假天数。年假天数的计算方法见表7.5。

表7.5 年假计算办法

解题步骤

本例的问题相当复杂,因此可以分多个步骤来书写公式,将一个公式拆分成多个公式书写更容易理解公式的计算过程,同时也不易出错。具体步骤如下。

1.在E1:H1区域分别输入“进厂日期”、“完善日期”、“进厂月数”、“年假天数”。

2.在E2单元格输入以下公式,此公式用于提取两个“-”之间的字符,提取结果见图7.129。

图7.129 提取进厂日期

职员编号中的日期没有完整的年份,因此需要通过公式来完善日期。

3.在F2单元格输入以下公式:

有了完整的入职日期后就可以计算职工的入职时间了,单位为月。

4.在G2单元格输入以下公式:

有了入职时间,接下来就可以通过IF函数计算职工可享用年假的天数。

5.在H2单元格输入以下公式:

在以上4个公式的协同工作下,职工的年假天数会自动产生,效果如图7.130所示。

图7.130 分四步计算出年假天数

6.选择E2:H2,然后按下填充柄向下拖到第12行,从而让公式计算所有职工的年假天数。

假设只用一个公式计算年假天数,那么公式会相当长,不管是新手还是老手都不建议直接一步完成。如果要求只能在单列中完成,那么可以定义名称,通过名称简化公式,操作步骤如下。

1.删除E:H区域,然后在E1中输入“年假天数”。

2.选中E2单元格,按组合键<Ctrl+F3>打开“名称管理器”。

3.单击“新建”按钮,弹出“新建名称”对话框,然后将名称设置为“时间”,将引用位置设置为以下公式:

4.单击“确定”按钮保存设置,然后返回工作表界面。

5.在E2单元格输入以下公式:

6.双击E2单元格的填充柄,将公式向下填充到E12,最终效果如图7.131所示。

图7.131 单个公式计算年假天数

知识扩展

1.公式“=TRIM(MID(SUBSTITUTE(A2,"-",REPT(" ",99)),99,99))”的含义是将职员编号中的“-”替换成99个空格,然后用MID函数从替换后的字符串中的第99位开始提取99个字符,从而得到空格与日期组成的字符串,最后用Trim函数去除空格,只保留日期。

公式中的REPT函数用于将指定的字符重复显示若干次,第一参数是要重复显示的字符,第二参数用于控制重复次数。例如“=REPT("AB",3)”的计算结果为“ABABAB”。

SUBSTITUTE函数用于将字符串中的部分字符替换成新字符,在本例中的作用是将“-”替换成99个空格。

由于替换后的日期前后各有99个空格,因此使用MID函数从替换后的字符串中第99位开始提取99个字符只能提取到空格和日期,不包含前面的部门编号和后面的序号,此时去除所有空格就只剩下日期了。

2.职工编号中的日期包含两种:一种是2000年以后的,第一个数字是0或1;另一种是2000年以前的,第一个数字是9,基于此规律,使用IF函数判断第一个数字是否等于9即可,如果等于9则在日期前添加19,否则添加20。

此处要注意的一点是LEFT函数提取出来的数字是文本格式的,因此和数字9比较时需要将数值9也转换成文本,在9的前后添加半角引号

3.DATEDIF函数计算两个日期的时间差时,两个日期都必须是日期格式的,“20150314”这种格式的数值不是日期格式,因此需要使用TEXT函数转换成“0000-00-00”这种格式后再参与计算。

4.当IF函数要求两个条件同时成立才算满足条件时,需要使用AND函数限制这两个条件。

Excel 可否对重复出现的姓名生成编号?

图7.117中部分队员参与了多项比赛,现要求对队员编号。当一个队员参与了多项比赛时,分别编号为1、2、3……第二个队员又重新从1开始编号。

图7.117 参赛队员信息表

解题步骤

本例宜用COUNTIF函数解题,具体操作步骤如下。

1.在A2单元格输入以下公式:

2.双击A2单元格,使公式向下填充到底,公式产生的编号如图7.118所示。

图7.118 公式生成的编号

知识扩展

1.COUNTIF函数用于计算符合条件的单元格数量,此函数在以前的案例中多次用到。本例的重点在于相对引用的数据源区域“$B$2:B2”,将公式向下填充时引用对象在逐个增加,因此在数据源中符合条件的单元格数量也相应地增加。

当公式在A2时,数据源区域是B2:B2,因此符合条件的单元格只有一个;当公式在A3时,数据源区域是B2:B3,因此符合条件的单元格有两个;当公式在A4时,数据源区域是B2:B4,因此符合条件的单元格有3个;当公式在A5时,数据源区域是B2:B5,此时条件已经变成B5,符合条件的单元格只有B5一个单元格,因此编号重新从1开始,而不是4。

2.假设要求按人数生成编号,即同一人不管参加多少个项目都使用相同的编号,那么应该改用以下公式:

公式的含义在前面的案例中有详细说明,公式的结果如图7.119所示。

图7.119 按人数生成的编号

Excel 能否按双条件对选手编号?

在图7.112中,省名所在单元格已经合并,现要求按省名对该省的参赛队员编号,其中第一个省编号A,第一个队员编号A1,然后向上递增。第二个省的第二个队员则编号为B2。

图7.112 参赛选手信息表

解题步骤

要根据省名数量产生升序的字母,重点在于COUNTA和CHAR两个函数的应用,而累加字母右边的数字编号则重点在于MID函数的应用。具体操作步骤如下。

1.在A2单元格输入以下公式:

2.将公式向下填充到A15,公式产生的编号如图7.113所示。

图7.113 双条件编号

知识扩展

1.COUNTA函数用于计算区域中非空单元格的数量,以图7.113为例,“=COUNTA(B2:B2)”、“=COUNTA(B2:B3)”、“=COUNTA(B2:B4)”的计算结果都是 1,因为合并区域中只有左上角单元格才有数据。

“=COUNTA(B2:B6)”、“=COUNTA(B2:B7)”、“=COUNTA(B2:B8)”的计算结果则为2,因为它的计算对象包含两个合并区域。

2.CHAR 函数可以根据字符编码生成对应的字符,如 49886 代表“罗”,那么公式“=CHAR(49886)”的运算结果就是“罗”。

字母A的编码是65,字母B的编号是66,字母C的编码是6……基于此规律,只要使用65开头的自然数编码作参数,CHAR函数就可以生成A、B、C这种升序的序号。图7.114中展示了表达式“64+COUNTA($B$2:B2)”在不同单元格的计算结果变化过程,读者可以根据图 7.114理解字母编号的生成规律。

图7.114 CHAR函数的参数变化过程

3.由于公式从 A2 开始,因此表达式“IF(B2<>"",1,MID(A1,2,2)+1)”的含义是:当公式所在单元格的右边单元格非空时,那么产生字符1,否则提取上方单元格字母以外的数字并累加1。由于本例的数据源少,不需要用到两位字母,因此在设置公式时可以取巧,用 MID 函数从第 2位开始取值,提取长度也等于2位。在实际工作中需要根据数据的变化修改公式。

Excel 能否对合并的单元格编号?

图7.105中A列的姓名处于合并单元格中,能否在A列前面插入一列,然后采用与姓名列相同的合并方式,并在合并单元格中按姓名编号?

图7.105 成绩表

解题步骤

合并单元格无法填充公式,因此只能选中所有合并单元格,然后一次性输入公式。编写公式有很多种思路,本例展示MAX函数实现需求的思路,步骤如下。

1.选择B列并单击右键,从右键菜单中选择“插入”。

2.将B列复制到A列,然后删除A列的值,此时A列的合并单元格与B列的合并方式完全一致,效果如图7.106所示。

3.在A1中输入“编号”。

4.选择A2:A14,然后输入以下公式:

输入公式后必须按组合键<Ctrl+Enter>结束,公式产生的编号如图7.107所示。

图7.106 插入空列并按B列的方式合并

图7.107 在合并单元格生成编号

知识扩展

1.MAX函数用于计算一个或多个区域的最大值,它有1~255个参数,其中第1个参数必须输入,第2~255个参数是可选参数,可以忽略不写。函数的具体语法如下:

其中第2~255个参数可以忽略。

MAX函数提取最大值时会所略文本,但无法忽略错误值。在图7.108中,A2单元格是文本,公式“=MAX(A1:A3)”可以忽略A2的值,从其他单元格中提取最大值10。假设A2单元格中有公式“=0/0”,那么公式“=MAX(A1:A3)”也只能得到错误值#DIV/0!。

图7.108 使用MAX函数提取区域中的最大值

2.本例公式“=MAX($A$1:A1)+1”中MAX函数的参数使用“$A$1:A1”,它代表A列第一行到公式所在行的上一行之间的区域,当公式在A2时计算A1的最大值,公式在A5时计算A1:A4的最大值,公式在A9时计算A1:A8的最大值。

当公式在A2时,由于A1单元格只有文本,表达式“MAX($A$1:A1)”的计算结果是0,因此在MAX后加1从而使公式产生编号1;当公式在A5时,MAX函数从A1:A4中提取到的最大值是1,此时加1后将得到2…因此公式从上向下会依次产生1、2、3这类递增的序号。

3.本例的公式其实是以A1作为辅助单元格来实现需求的,假设没有标题行,公式要从A1开始书写,那么由于没有了辅助单元格,本例公式也就不再适用。

如果不用辅助单元格,可以改用图7.109中的公式来完成。

图7.109 使用COUNTA函数生成编号

COUNTA函数用于计算非空单元格的数量,参数“$B$1:B1”锁定了起始单元格,终止单元格由公式所在行决定,因此COUNTA函数的计算结果也从1开始相应地递增,从而产生升序的编号。

4.本例还可以将公式替换为“=COUNT($A$1:A1)+1”,同样用A1作为辅助单元格的思路达成需求。