把汇总数据拆分到各工作表 (excel按类别拆分多个excel文件)

在Excel表格中说起数据信息按类别拆分,很多朋友都会想到利用数据透视表显示报表筛选页的功能或者使用VBA代码。这篇文章为朋友们分享一种使用函数实现数据拆分的方法。

一.实例要求:

把下图所示的名称为“信息表”的工作表中的内容按班级拆分到不同的工作表里。

把汇总数据拆分到各工作表,按任意列拆分工作表

二.操作方法:

1.获取工作表名称:

(1)在打开的工作簿中任意一个工作表的任意一个单元格中输入下方公式就会返回包含路径和工作簿名称的当前工作表的名称的字符串。例如D:\[工作簿名.xlsx]当前工作表名。

把汇总数据拆分到各工作表,按任意列拆分工作表

=CELL("filename",A1)

(2)去除路径和工作簿名称,只保留工作表的名称:

方法1:

①输入下方公式:

=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,50)

②公式解析:

首先使用FIND函数查找到工作簿名称结束的位置;然后用MID函数提取(1)所述的字符串、开始位置是“]”出现的位置+1、提取的长度是50(也可以设置更长);mid函数提取时会忽略最后的空白内容,从而实现只提取工作表名称的效果。

方法2:

①输入下方公式:

=TRIM(RIGHT(SUBSTITUTE(CELL("filename",A1),"]",REPT(" ",50)),50))

②公式解析:

首先使用FINREPT(" ",50)制作一个长度为50的空字符串;其次用SUBSTITUTE函数将“]”替换成长度为50的空字符串;再其次用RIGHT函数提取字符串最右侧长度为50的部分;最后用TRIM函数去除空白内容、从而实现只提取工作表名称的效果。

(3)注意事项:

只在一个工作表中获取工作表名称时CELL函数的第一个参数可以省略,同时选择多个工作表获取名称时CELL函数的第二个参数不可省略,否则只能得到都是同一个工作表的名称。

2.将信息表的表头复制到各个工作表:

选择信息表的表头复制,按住shift键选择所有要拆分数据的表格粘贴表头。

把汇总数据拆分到各工作表,按任意列拆分工作表

3.批量拆分数据:

(1)按住shift键选择所有要拆分数据的工作表,在B2单元格输入下方的公式以CTRL+SHIFT+ENTER三键确定。向左、向右复制填充公式,最后向下填充公式直到出现错空白。鼠标右键工作表名称,选择取消组合工作表。

把汇总数据拆分到各工作表,按任意列拆分工作表

=INDEX(信息表!B:B,SMALL(IF(信息表!$B$2:$B$18=TRIM(RIGHT(SUBSTITUTE(CELL("filename",$A$1),"]",REPT(" ",50)),50)),ROW($B$2:$B$18),10000),ROW($A1))) & ""

(2)公式解析:

①TRIM(RIGHT(SUBSTITUTE(CELL("filename",$A$1),"]",REPT(" ",50)),50))这部分就不再介绍返回的工作表的名称。

②IF函数判断信息表的B2:B18区域的值是否和相应工作表表名相等;如果相等则返回B列值对应的行号、否则返回10000,最终得到一个由逻辑值TRUE和FLASE构成的内存数组。

③SMALL和ROW函数对IF函数的结果进行从小到大取数,随着公式的向下填充,依次提取第1、2、3、4……N个最小值,由此依次得到符合条件的结果。

④INDEX函数根据SMALL函数返回的索引值,得出结果。

⑤当SMALL函数所得到的结果为10000,意味着符合条件的行号已经全部提取。此时INDEX函数将返回B10000单元格的值,通常来说,这么大行号的单元格是空白单元格,使用&“”的方式,规避空白单元格返回零值的问题,使之返回假空。当然这里的10000可以设置成其他的数字。

总结,SMALL、IF和ROW这个万金油组合函数配合CELL函数原来还可以这么用!