当前位置:首页 > 经验

表格折叠展开操作方法 excel折叠行怎么设置

最近遇到一个小需求,如何将Excel单元格中的内容拆分到多行?

下图中左边是原始数据,每位员工需要上班的日期,合并在一个单元格内,日期之间间隔一个空白符;现在需要拆分成表右边所示的样子,即将员工需要上班的日期拆分成一行行数据;

Excel一列数据拆分为多行,VBA轻松搞定

传统的方法可以直接对班期列进行分列操作,再将分列所得数据一行行复制转置粘贴,步骤繁琐麻烦,这里用VBA处理,写好代码,一秒钟搞定,一劳永逸~

话不多说,让我们看下处理效果

Excel一列数据拆分为多行,VBA轻松搞定

思路

1、先看下数据,是否规律,有迹可循,可以发现班期列皆为日期之间加一个空白符,一个日期为8位数,长度为8;

2、计算每个单元格内日期的个数,这里利用【Int(Len(Sheets(“Sheet1”).Cells(i, 2)) / 9) + 1】先利用长度函数Len函数计算出单元格的长度;

再将其长度除以9(虽然每个日期的长度是8,但是日期后面皆跟了一个空白字符,所以除以9);

再利用int函数取整,最后结果需要加上1,因为最后一个日期后面没有空白符;

最终得出来的结果就是单元格内部包含的日期个数;如对B2单元格用此函数:INT(LEN(B2)/ 9) + 1=3,返回3;

3、依次循环从单元格内取出每一个日期,写入到Excel工作表中去,这里用MID函数;

4、在最外面嵌套一个大循环,依次对数据源班期列每一个单元格进行操作,依次取出所有的日期,写入Excel表格中,完成拆分。

代码

代码展示如下:

Excel一列数据拆分为多行,VBA轻松搞定

代码讲解:

1、新建一个新的插页,并重命名为【拆分】插页,用于存放拆分的数据,并将表头A1/B1单元格填入内容;

2、参数b主要是用来统计拆分插页目前数据一共有多少行,方便数据写入;

3、第一个for循环,循环插页Sheet1中班期列每个单元格;

4、参数a上面说过,为每个单元格内日期的个数;

5、再次利用一个for循环,依次取出日期,并将之写入到【拆分】插页中去;

这里的 Mid(Sheets(“Sheet1”).Cells(i, 2), (j – 1) * 9 + 1, 8)为取数函数,第一个参数:要取字符串的单元格,第二个参数:要取字符串开始的位置,第三个参数:要取字符串的长度;

6、通过两次循环,完成数据拆分。

便于大家复制,详细代码如下:

Sub 拆分单元格()
Dim a%, b%, i%, j%
Sheets.Add After:=ActiveSheet
ActiveSheet.Name = "拆分"
Sheets("拆分").Cells(1, 1) = "员工ID"
Sheets("拆分").Cells(1, 2) = "班期"
b = Sheets("拆分").Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To Sheets("Sheet1").Cells(Rows.Count, 2).End(xlUp).Row
a = Int(Len(Sheets("Sheet1").Cells(i, 2)) / 9) + 1
For j = 1 To a
b = b + 1
Sheets("拆分").Cells(b, 1) = Sheets("Sheet1").Cells(i, 1)
Sheets("拆分").Cells(b, 2) = Mid(Sheets("Sheet1").Cells(i, 2), (j - 1) * 9 + 1, 8)
Next
Next
MsgBox "已完成"
End Sub

小结

对于有规律的、经常需要操作的数据,最好利用VBA技术,一次编写,受益终身,摆脱繁琐的操作,本例中仅通过日期数据为大家做个展示,至于其它类型的数据拆分,只需要理清逻辑,对函数参数、代码做相应的修改即可。

纸上得来终觉浅,绝知此事要躬行,小伙伴们记得动手操作下,有问题,欢迎留言交流!

声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:fendou3451@163.com
标签:

  • 关注微信

相关文章