在 Excel 中将一列数据拆分为多行,使用 VBA 即可轻松完成

 2024-02-22 00:04:27  阅读 0

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

下图左边是原始数据。 每个员工需要上班的日期合并到一个单元格中,日期之间有一个空白字符。 现在需要拆分成表格右侧显示的内容,即员工需要上班的日期。 将数据分成行;

传统方法可以直接将移位列划分为列,然后将逐行划分列得到的数据进行复制、转置和粘贴。 步骤繁琐、麻烦。 这里我们用VBA来处理,写代码,一秒搞定,一劳永逸~

废话不多说,我们来看看处理效果:

想法

1、先看一下数据,看看有没有规律和痕迹可循。 您可以发现班次列的日期之间都有一个空格字符。 日期有8位,长度为8;

2. 计算每个单元格中日期的数量。 这里,使用 [Int(Len(("").Cells(i, 2)) / 9) + 1] 并首先使用长度函数 Len 函数计算单元格的长度。 ;

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

然后使用int函数进行四舍五入,最终结果需要加1,因为最后一个日期后面没有空白字符;

最终结果是单元格中包含的日期数量; 如果在单元格 B2 上使用此函数:INT(LEN(B2)/9) + 1=3,将返回 3;

3. 依次从单元格中循环出每个日期并将其写入 Excel 工作表中。 这里,使用MID函数;

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

代码

代码如下所示:

取数函数的使用方法_函数取数系统怎么求_系统取数函数

代码解释:

1、新建一个,重命名为【Split】,用于存储分割数据,并填写标题单元格A1/B1的内容;

2、参数b主要用于统计split 的数据总行数,方便数据写入;

3、第一个for循环循环遍历的shift列中的每个单元格;

4、参数a,如上所述,是每个单元格中日期的数量;

5、再次使用for循环,将日期一一取出,写入到【Split】插入中;

Mid(("").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技术,一次编写,受益终生,摆脱繁琐的操作。 在本例中,我们仅使用日期数据来演示。 至于其他类型的数据拆分,只需要理清逻辑并对函数参数和代码进行相应的修改即可。

你在纸上看到的最终只是浅薄的,但我知道这件事需要进行。 朋友们,请记得练习一下。 如有疑问,请留言交流!

取数函数的使用方法_系统取数函数_函数取数系统怎么求

标签: 日期 单元 拆分

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码