Note: The other languages of the website are Google-translated. Back to English

如何根据Excel中的列将数据拆分为多个工作表?

假设您有一个包含大量数据的工作表,现在,您需要根据以下内容将数据拆分为多个工作表: 名称: 列(请参见下面的屏幕截图),然后随机输入名称。 也许您可以先对它们进行排序,然后将它们一个一个地复制并粘贴到其他新工作表中。 但这需要您的耐心反复复制和粘贴。 今天,我将讨论解决该任务的一些快速技巧。

doc按列1拆分数据

根据列使用VBA代码将数据拆分为多个工作表

使用Kutools for Excel根据列将数据拆分为多个工作表


根据列使用VBA代码将数据拆分为多个工作表

如果要基于列值快速自动拆分数据,则以下VBA代码是不错的选择。 请这样做:

1。 按住 ALT + F11 键打开 Microsoft Visual Basic应用程序 窗口。

2。 点击 插页 > 模块,然后将以下代码粘贴到“模块窗口”中。

Sub Splitdatabycol()
'updateby Extendoffice
Dim lr As Long
Dim ws As Worksheet
Dim vcol, i As Integer
Dim icol As Long
Dim myarr As Variant
Dim title As String
Dim titlerow As Integer
Dim xTRg As Range
Dim xVRg As Range
Dim xWSTRg As Worksheet
On Error Resume Next
Set xTRg = Application.InputBox("Please select the header rows:", "Kutools for Excel", "", Type:=8)
If TypeName(xTRg) = "Nothing" Then Exit Sub
Set xVRg = Application.InputBox("Please select the column you want to split data based on:", "Kutools for Excel", "", Type:=8)
If TypeName(xVRg) = "Nothing" Then Exit Sub
vcol = xVRg.Column
Set ws = xTRg.Worksheet
lr = ws.Cells(ws.Rows.Count, vcol).End(xlUp).Row
title = xTRg.AddressLocal
titlerow = xTRg.Cells(1).Row
icol = ws.Columns.Count
ws.Cells(1, icol) = "Unique"
Application.DisplayAlerts = False
If Not Evaluate("=ISREF('xTRgWs_Sheet!A1')") Then
Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = "xTRgWs_Sheet"
Else
Sheets("xTRgWs_Sheet").Delete
Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = "xTRgWs_Sheet"
End If
Set xWSTRg = Sheets("xTRgWs_Sheet")
xTRg.Copy
xWSTRg.Paste Destination:=xWSTRg.Range("A1")
ws.Activate
For i = (titlerow + xTRg.Rows.Count) To lr
On Error Resume Next
If ws.Cells(i, vcol) <> "" And Application.WorksheetFunction.Match(ws.Cells(i, vcol), ws.Columns(icol), 0) = 0 Then
ws.Cells(ws.Rows.Count, icol).End(xlUp).Offset(1) = ws.Cells(i, vcol)
End If
Next
myarr = Application.WorksheetFunction.Transpose(ws.Columns(icol).SpecialCells(xlCellTypeConstants))
ws.Columns(icol).Clear
For i = 2 To UBound(myarr)
ws.Range(title).AutoFilter field:=vcol, Criteria1:=myarr(i) & ""
If Not Evaluate("=ISREF('" & myarr(i) & "'!A1)") Then
Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = myarr(i) & ""
Else
Sheets(myarr(i) & "").Move after:=Worksheets(Worksheets.Count)
End If
xWSTRg.Range(title).Copy
Sheets(myarr(i) & "").Paste Destination:=Sheets(myarr(i) & "").Range("A1")
ws.Range("A" & (titlerow + xTRg.Rows.Count) & ":A" & lr).EntireRow.Copy Sheets(myarr(i) & "").Range("A" & (titlerow + xTRg.Rows.Count))
Sheets(myarr(i) & "").Columns.AutoFit
Next
xWSTRg.Delete
ws.AutoFilterMode = False
ws.Activate
Application.DisplayAlerts = True
End Sub

3。 然后按 F5 键运行代码,并弹出提示框,提醒您选择标题行,请参见屏幕截图:

doc按列7拆分数据

4。 然后,单击 OK 按钮,然后在第二个提示框中,选择要基于其拆分的列数据,请参见屏幕截图:

doc按列8拆分数据

5。 然后,点击 OK,活动工作表中的所有数据均按列值划分为多个工作表。 拆分工作表使用拆分单元格名称命名。 看截图:

doc按列2拆分数据

备注:拆分的工作表放在主工作表所在的工作簿的末尾。


使用Kutools for Excel根据列将数据拆分为多个工作表

作为一个Excel初学者,这种冗长的VBA代码对我们来说有点困难,而且我们大多数人甚至都不知道如何根据需要修改代码。 在这里,我将向您介绍一个多功能工具-Kutools for Excel,它的 拆分数据 该实用程序不仅可以帮助您根据列将数据拆分为多个工作表,还可以按行数拆分数据。

请注意:申请这个 拆分数据,首先,您应该下载 Kutools for Excel,然后快速轻松地应用该功能。

安装后 Kutools for Excel,请这样做:

1。 选择要拆分的数据范围。

2。 点击 Kutools 加 > 工作表 > 拆分数据,请参见屏幕截图:

doc按列3拆分数据

3。 在 将数据拆分为多个工作表 对话框,您需要:

1)。 选择 特定栏 在选项 分割依据 部分,然后在下拉列表中选择要用于拆分数据的列值。 (如果您的数据包含标题,并且您希望将其插入每个新的拆分工作表中,请检查 我的数据有标题 选项。)

2)。 然后,您可以在 新工作表名称 部分,从中指定工作表名称规则 规则 下拉列表中,您可以添加 字首 or 后缀 以及工作表名称。

3)。 点击 OK 按钮。 看截图:

doc按列4拆分数据

4。 现在,数据被拆分为一个新的工作簿中的多个工作表。

doc按列5拆分数据

点击下载Kutools for Excel并立即免费试用!


使用Kutools for Excel根据列将数据拆分为多个工作表

Kutools for Excel 包括300多个便捷的Excel工具。 30天免费试用,不受限制。 立即下载免费试用版!


相关文章:

如何按行数将数据拆分为多个工作表?


最佳办公效率工具

Kutools for Excel解决了您的大多数问题,并使您的生产率提高了80%

  • 重用: 快速插入 复杂的公式,图表 以及您以前使用过的任何东西; 加密单元 带密码 创建邮件列表 并发送电子邮件...
  • 超级公式栏 (轻松编辑多行文本和公式); 阅读版式 (轻松读取和编辑大量单元格); 粘贴到过滤范围...
  • 合并单元格/行/列 不会丢失数据; 拆分单元格内容; 合并重复的行/列...防止细胞重复; 比较范围...
  • 选择重复或唯一 行; 选择空白行 (所有单元格都是空的); 超级查找和模糊查找 在许多工作簿中; 随机选择...
  • 确切的副本 多个单元格,无需更改公式参考; 自动创建参考 到多张纸; 插入项目符号,复选框等...
  • 提取文字,添加文本,按位置删除, 删除空间; 创建和打印分页小计; 在单元格内容和注释之间转换...
  • 超级滤镜 (将过滤方案保存并应用于其他工作表); 高级排序 按月/周/日,频率及更多; 特殊过滤器 用粗体,斜体...
  • 结合工作簿和工作表; 根据关键列合并表; 将数据分割成多个工作表; 批量转换xls,xlsx和PDF...
  • 超过300种强大功能。 支持Office / Excel 2007-2019和365。支持所有语言。 在您的企业或组织中轻松部署。 完整功能30天免费试用。 60天退款保证。
kte选项卡201905

Office选项卡为Office带来了选项卡式界面,使您的工作更加轻松

  • 在Word,Excel,PowerPoint中启用选项卡式编辑和阅读,发布者,Access,Visio和Project。
  • 在同一窗口的新选项卡中而不是在新窗口中打开并创建多个文档。
  • 每天将您的工作效率提高50%,并减少数百次鼠标单击!
officetab底部
按评论排序
注释 (291)
还没有评分。 成为第一位评论!
该评论由网站上的主持人最小化
根据带有 VBA 代码的列将数据拆分为多个工作表会显示一些错误。 请尝试纠正它并更新它。 如果您提供示例 excel 文件,它将非常有帮助。
贾加德什
该评论由网站上的主持人最小化
嗨,感谢它为我工作的代码! 我正在尝试找到一个根据日期将一张主表拆分为多张表的代码
乔治
该评论由网站上的主持人最小化
那太不可思议了! 这个过程需要我一个多小时才能完成,但它在 30 秒内完成。 这个我将保留在我的 VBA 库中。 谢谢!
海蒂
该评论由网站上的主持人最小化
嗨,我的工作表中有 30000 个单元格,需要在几个月内将它们拆分。 有没有我可以用来更快地完成它的代码。 我有 8 列,日期是 B 列。我一直在玩弄上面给出的代码,但失败了。 你能帮我解决这个问题吗? 提前致谢
莎拉
该评论由网站上的主持人最小化
我收到以下错误:运行时错误“6”溢出调试后显示行 For i = 2 To Ir 我的 excel 行超过 500,000。 有什么解决办法非常感谢你的代码。 最好的问候乐
结束
该评论由网站上的主持人最小化
你好,非常感谢你的代码。 我收到以下错误:运行时错误“6”溢出 For i = 2 To Ir 任何解决方案。 谢谢
结束
该评论由网站上的主持人最小化
按 F5 时出现错误 - GoTo Box 要求参考?
辛迪
该评论由网站上的主持人最小化
VBA 过程完美运行,非常感谢您分享您的专业知识并为我节省了大量时间!
尼基
该评论由网站上的主持人最小化
VBA 代码运行良好。 随着对 Sheet1 的更改,它似乎不会更新工作表。 请协助。
李小姐Vickey
该评论由网站上的主持人最小化
嗨,感谢它为我工作的代码! 我只有两个问题/评论。 1 复制的数据不包括原始文件的布局。 是否可以使用自动过滤器将数据复制为表? 2 复制的数据似乎不受标题范围的限制。 是否可以调整特定范围或表名的代码? 这些调整会很有帮助。 问候,彼得
彼得
该评论由网站上的主持人最小化
奇迹般有效! 谢谢你。
贝琳达·马丁内斯
该评论由网站上的主持人最小化
像魅力一样工作...感谢您提供高级代码... :lol:
鲍比 M
该评论由网站上的主持人最小化
非常感谢,这很好用。 但是,如果我希望每个选项卡中的数据再次排序(使用另一列),会发生什么? 基本上,这个 VBA 将它分解为选项卡,但我可能希望它进一步分解..这可能吗?
乔纳森
该评论由网站上的主持人最小化
嗨乔纳森,我知道的旧评论,但将来可能对其他人有帮助:我需要这样做,但找不到使用 VBA 的简单方法。 但是,我发现如果您在电子表格中创建一个新列作为 2 的合并,例如 =A1&" "&A2 这将为您提供包含两组信息的 1 个单元格。 然后你可以运行上面的模块,它工作正常! 编辑 - 列中的数据需要少于 30 个字符,否则数据不会被复制(在模块上显示为错误),并且您会在新工作表中间获得一张空白工作表。
该评论由网站上的主持人最小化
太棒了..这太棒了。 我为这个问题苦苦挣扎了很长时间,这段代码作为一个喘息的机会出现了。 谢谢分享。
阿迪提
该评论由网站上的主持人最小化
惊人的。 感谢您发布。
戈皮纳斯
该评论由网站上的主持人最小化
对于较小的数据(少于 1200 行),该代码就像一个魅力。 我试图在更大的工作表上使用(17000 行),但它在分成 10-12 张后就崩溃了。 所以我们尝试将原始数据拆分为 3 个不同的工作簿,但仍然关闭了我们。 我们有 Windows 7,我们的计算机也没有那么慢。 您是否建议任何有限的数据行以安全地使用此代码? 任何建议将不胜感激。
三重
该评论由网站上的主持人最小化
对于较小的数据(少于 1200 行),该代码就像一个魅力。 我尝试在更大的工作表上使用(17000 行),但它在分成 10-12 张后就崩溃了。 所以我们尝试将原始数据拆分为 3 个不同的工作簿,但仍然关闭了我们。 我们有 Windows 7,我们的计算机也没有那么慢。 您是否建议任何有限的数据行以安全地使用此代码? 任何建议将不胜感激。 我不确定的是:宏可以支持的最大行数是多少? 我可以玩它......它在 20k 和 40k 之间![/quote]
亚伯所罗门
该评论由网站上的主持人最小化
面临同样的问题。 代码适用于数据行较少的工作表,但是对于较大的数据,它会显示错误,因为“Excel 无法使用可用资源完成此任务。选择较少的数据或关闭其他应用程序”(没有任何其他应用程序同时工作)代码对于较小的数据(少于 1200 行),它就像一个魅力。 我尝试在更大的工作表上使用(17000 行),但它在分成 10-12 张后就崩溃了。 所以我们尝试将原始数据拆分为 3 个不同的工作簿,但仍然关闭了我们。 我们有 Windows 7,我们的计算机也没有那么慢。 您是否建议任何有限的数据行以安全地使用此代码? 任何建议将不胜感激。
Shrikant
该评论由网站上的主持人最小化
你是我永远的英雄! 我已经为此寻找了几个月没有运气。 我必须每周/每月将报告分成 147 多个工作表,他们不会让我得到 kutools。 在那张纸条上..我真的需要学习编码。 :(但是谢谢!
户次
该评论由网站上的主持人最小化
嗨,我有一张有 65000 条记录和 8 种不同情况的工作表,所以基本上它应该生成 80 个不同的工作表。 我尝试运行此代码,但它会引发运行时错误 6 溢出。 可以调整此代码以解决我的问题吗? 请您的帮助将不胜感激。
ACE的
该评论由网站上的主持人最小化
[quote]你好,我有一张有 65000 条记录和 8 种不同情况的工作表,所以基本上它应该生成 80 个不同的工作表。 我尝试运行此代码,但它会引发运行时错误 6 溢出。 可以调整此代码以解决我的问题吗? 请您的帮助将不胜感激。由王牌[/quote] 尝试将 Dim vcol, i As Integer 更改为 Dim vcol, i As Long
JD
该评论由网站上的主持人最小化
嗨,我尝试将 DIM vcol 更改为 LOng,它运行良好,但突然出现错误,没有足够的内存来完成此操作,尝试使用更少的数据或关闭其他应用程序。 虽然我没有打开任何其他应用程序。 我有超过 100 k 行和大约。 16 MB 文件大小。 任何帮助将不胜感激。 谢谢穆斯塔法
穆斯塔法
该评论由网站上的主持人最小化
很棒的代码-完美运行(如果您将变量更改为电子表格所需的变量)
克罗夫蒂库克
该评论由网站上的主持人最小化
我有一张可变行数的工作表。 其中一列是从 2010 年开始的日期。 其他列是基金名称,其中包含每个基金相对于日期的资产净值数据。 所以我不想将列拆分为不同的工作表,我想将每个 FUND NAME 拆分为自己的工作表,其中包含每个月底日期的 NAV 数据,而不是每日日期。 这可以做到还是不可能?
艾哈迈德·萨希德
该评论由网站上的主持人最小化
我有一个我使用的工作表,我正在尝试找到一个 vba 代码,它将重新调整帐户名称并将特定行复制到具有相同名称的新工作簿和工作表中,你能帮忙吗?
Tim
该评论由网站上的主持人最小化
伟大的! VBA 代码正在运行,谢谢! 我需要将这些输出工作表放在单独的 excel 文件中而不是工作表中,并且当我拆分为许多工作表时出现错误。
斯塔斯科
该评论由网站上的主持人最小化
Starscor 和 Tim 如果您想使用行的名称将文件的工作表拆分为多个文件,那么在同一个网页中有一个小的宏代码可以执行此操作,只需搜索“拆分工作簿以分隔 Excel 文件”即可会找到的。 将该示例的代码添加到此示例的末尾,删除重复的 end sub 和 sub 当然,您将获得每个文件。
科科利索
该评论由网站上的主持人最小化
任何人都可以帮助我如何一次对同一工作簿中不同工作表中的列进行排序,并删除不同工作表中的重复项,因为我在同一个工作簿中有大约 65 个工作表
佳日
该评论由网站上的主持人最小化
这太令人兴奋了! 谢谢你。 我已经为此寻找了一段时间。
有一个
该评论由网站上的主持人最小化
太好了-谢谢你分享这个。 甚至将亮点/格式传播到新的工作表!
弗兰基
这里还没有评论
加载更多
留下你的意见
以访客身份发帖
×
评价此帖子:
0  产品特性
建议地点