当前位置:首页 > 办公设计 > Office教程 > 用VBA按列信息拆分数据到多张工作表

用VBA按列信息拆分数据到多张工作表

1年前 (2025-05-24)Office教程2200

本文为《别怕,Excel VBA其实很简单(第3版)》随书问题参考答案

在本问题中,要将拆分结果保存在新工作簿中,那可以在执行拆分数据的操作前,先新建工作簿及工作表来保存拆分结果。

在写过程前,可以在模块的开始位置先声明两个模块级变量或公共变量:表示保存拆分结果的工作簿ToWb和要拆分的数据表Sht,如:

Dim ToWb As Workbook, Sht As Worksheet

然后将新建保存结果的工作簿及工作表的代码写为单独的过程,如:

Sub ShtAdd()
Dim ShtCount As Integer '记录新建工作簿中包含的工作表数量
Set ToWb = Workbooks.Add '新建工作簿,并存到变量ToWb中
ShtCount = ToWb.Worksheets.Count
Dim i As Long, ShtName As String
i = 2
'Do循环语句用于在工作簿中新建保存拆分结果的工作表
Do While Sht.Cells(i, "A").Value <> ""
ShtName = Sht.Cells(i, "A").Value
If IsSht(ShtName) = False Then 'IF语句判断指定名称的工作表是否存在
ToWb.Worksheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = ShtName
Sht.Rows(1).Copy ToWb.Worksheets(ShtName).Rows(1) '复制表头到新工作表中
End If
i = i + 1
Loop
'For循环语句删除新建的工作簿中原带的空工作表
Application.DisplayAlerts = False
For i = ShtCount To 1 Step -1
ToWb.Worksheets(i).Delete
Next i
Application.DisplayAlerts = True
End Sub

其中用到一个判断指定名称的工作表是否存在的自定义函数,代码为:

Function IsSht(ByVal ShtName As String) As Boolean '判断工作表名称是否存在
On Error Resume Next
If Worksheets(ShtName) Is Nothing Then
IsSht = False '工作表不存在,函数值为False
Else
IsSht = True '工作表已存在,函数值为true
End If
End Function

当然,这个判断工作表是否存在的代码,也可以直接写在过程中。

最后,再在原有程中,在执行拆分数据的操作前先调用上面的子过程ShtAdd,就能解决这个问题了,如:

Sub 拆分数据到工作表()
Dim ShtName As String, ToRng As Range, i As Integer, DataArr As Variant
Set Sht = ActiveSheet
Call ShtAdd ' 调用子过程,新建保存拆分结果的工作表及工作表
i = 2 '要拆分的第一条数据的行号
Do While Sht.Cells(i, "A").Value <> ""
ShtName = Sht.Cells(i, "A").Value
Set ToRng = ToWb.Worksheets(ShtName).Range("A1048576").End(xlUp).Offset(1, 0)
DataArr = Sht.Cells(i, "A").Resize(1, 8).Value
ToRng.Resize(1, 8).Value = DataArr '用数组传递数据
i = i + 1 '重设变量的值,以便下次循环能拆分新的记录
Loop
End Sub

代码容器中完成后的代码截图如下:

执行“拆分数据到工作表”的过程,就能工作表中的数据,按A列的信息拆分到不同工作表,保存在新工作簿中了。

扫描二维码推送至手机访问。

欢迎转载或分享本篇文章。

本文链接:https://www.jcba123.com/article/1461

分享给朋友:

“用VBA按列信息拆分数据到多张工作表” 的相关文章

Excel如何将一张工作表拆分成多个工作表Sheet?

Excel如何将一张工作表拆分成多个工作表Sheet?

工作中我们经常会遇到这种情况,所有的数据都整合在一个Excel表格里面了,现在想按需求分别拆分成多个工作表,有什么好办法吗?利用透视表,我们就可以轻松解决。 如下图所示,从销售一部到销售七部的所有业绩,全部都在一个表里面,现在我们将表格中数据拆分到7个工作表中,并自动命名。...

Excel一级下拉菜单选项如何做?快速有效的录入数据技巧!

Excel一级下拉菜单选项如何做?快速有效的录入数据技巧!

在制作表格的时候,我们可能会需要录入大量的数据。那么多数据要录入,想想都头疼,不仅浪费时间,说不准还会录入错误。那么有什么好的办法能够帮助我们避免呢?其实,在对待一些重复信息时,我们可以使用Excel下拉菜单帮助我们搞定,不仅节约时间,还能够很好的避免录入错误。那么Excel下拉菜单是如何...

毛茸茸的字体 | PPT打造虎皮字体

毛茸茸的字体 | PPT打造虎皮字体

咱们今天来学习一个既简单又漂亮的字体制作,老虎皮做的字体。当然,学习的是方法,你也可以利用各种动物皮毛来打造。 首先,需要一份素材,那就是动物皮毛,这里我就不提供了,大家可以到百度图片搜索一下“动物皮毛”,可以找到一堆的动物皮毛,随便选一个吧!建议找尺寸大点的图片。 输入文字...

XLOOKUP函数经典用法总结

XLOOKUP函数经典用法总结

HI,大家好,我是星光。 今天给大家分享的Excel函数是XLOOKUP,例先说一下它的基本语法。它有六个参数,成功超越大哥大OFFSET,成为参数最多的函数之一。 =XLOOKUP(查找值,查找范围,结果范围,[容错值],[匹配方式],[查询模式]) 参数看起来很多,不过只有前三个是...

将多列的区域或数组合并成一列,就用TOCOL函数

将多列的区域或数组合并成一列,就用TOCOL函数

今天分享TOCOL函数的几个典型应用。 这个函数目前可以在Excel 365和最新的WPS表格中使用,作用是将多列的区域或数组转换为单列。函数用法为: =TOCOL(要转换的数组或引用, [是否忽略指定类型的值], [按行/列扫描]) 其中第二参数为0或者省略该参数时,表示保留所有值。为1表示忽略空...

让Excel自动检测录入的数据,你会用吗?

让Excel自动检测录入的数据,你会用吗?

数据验证,在早期版本中叫数据有效性,能够对用户输入的内容进行检测,限制录入不符合要求的数据。 以下图为例,要分别输入员工年龄、性别、部门和手机号。 因为员工年龄不会小于16岁,也不会大于60岁,因此输入员年龄的区间应该是16~60之间的整数。通过设置数据验证,可以限制输入的年龄范围。 性别只有男...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。