在平常处理表格的时候,应该遇到过这种情况,有一个sheet中有很多行数据,然后要根据某一列来将这些数据进行分类,要分配到不同的表格中,如果数据量很大的话,就会有些困难。这个时候,使用VBA编程就会大大提高效率了。
-
下面我们来看看这个例子,我们要把下面这个截图中的数据根据部门的不同,分类到不同的表格中,如果我们要通过VBA编程的话应该如何来实现呢?
下面我们来看看代码,并对vba代码进行说明
Sub 修改文件()
Dim i, j, k
i = 1
For k = 2 To Sheet2.[a65536].End(3).Row
If Cells(k, "a") <> Cells(k, "a").Offset(1, 0) Then
'Sheets(1).HPageBreaks.Add before:=Cells(i, "a").Offset(1, 0) 这句话是不同的部门添加分页符,打印的时候会分页打印,这里暂且不需要
'下面这句话是创建一个新的表格,并以部门名命名
Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = Cells(k, "a").Value
'下面这句话是将test表中的内容赋值给各个新创建的表格
Worksheets(Worksheets.Count).Range("a1" & ":a" & k - i).Value = Sheet2.Range("a" & i + 1 & ":a" & k).Value
Worksheets(Worksheets.Count).Range("b1" & ":b" & k - i).Value = Sheet2.Range("b" & i + 1 & ":b" & k).Value
i = k
End If
Next
End Sub
从代码的注释中就可以大致看懂意思,短短几行代码就可以将不同部门的数据分别创建到新的表格中,本次场景的难点是
- 如何用VBA创建新的sheet
Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = Cells(k, "a").Value
这行代码就实现了在最后面创建新的工作表,并且设置表名为Cells(k, "a").Value
具体如果要了解vba创建新的工作表,可以查找一下Worksheets.Add这个方法
- 如何将不同部门的数据分开
我们是通过将两行数据进行对比来将数据进行区别的,具体就是这行代码:
If Cells(k, "a") <> Cells(k, "a").Offset(1, 0) Then
当这一行与下一行的单元格的值不一样的时候就可以判断是分属于不同部门的数据,此时就可以将不同部门数据分别创建新的sheet提取出来。
-
最后我们来看一下最终的效果:
希望对大家有所帮助^^, 不介意的话给点击个赞呗~