跳至主要内容

Excel 技巧:根据列值将数据分割到多个工作表/工作簿

Author: Xiaoyang Last Modified: 2025-05-07

在 Excel 中管理大型数据集时,根据特定列值将数据分割到多个工作表中会非常有用。这种方法不仅能够改善数据的组织方式,还能提高可读性,并使数据分析更加便捷。

假设您有一个包含多条记录的大型销售数据,其中包括产品名称、第一季度的销售数量等信息。目标是根据每个产品名称将这些数据分割到不同的工作表中,以便单独分析每个产品的销售表现。

根据列值将数据分割到多个工作表

使用 VBA 代码根据列值将数据分割到多个工作簿

Split data into multiple worksheets based on column value


根据列值将数据分割到多个工作表

通常情况下,您可以先对数据列表进行排序,然后逐一手动复制并粘贴到其他新的工作表中。但这需要耐心反复操作。在本节中,我们将介绍两种简单直接的方法,帮助您高效地完成此任务,节省时间并减少出错的可能性。

使用 VBA 代码根据列值将数据分割到多个工作表

1. 按住 ALT + F11 键打开 Microsoft Visual Basic for Applications 窗口。

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
Dim xWS 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
Set xWS = Sheets.Add(after:=Worksheets(Worksheets.Count))
xWS.Name = myarr(i) & ""
Else
xWS.Move after:=Worksheets(Worksheets.Count)
End If
xWSTRg.Range(title).Copy
xWS.Paste Destination:=xWS.Range("A1")
ws.Range("A" & (titlerow + xTRg.Rows.Count) & ":A" & lr).EntireRow.Copy xWS.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 键运行代码,弹出一个提示框,提醒您选择标题行,然后单击 确定。请参见截图:
split data into worksheets with vba code to select header row

4. 在第二个提示框中,请选择要基于其分割的列数据,然后单击 确定。请参见截图:
split data into worksheets with vba code to select data range

5. 当前工作表中的所有数据都根据列值被分割到多个工作表中。生成的工作表根据分割单元格中的值命名,并放置在工作簿的末尾。请参见截图:
split data into worksheets with vba code to get the result

 

使用 Kutools for Excel 根据列值将数据分割到多个工作表

Kutools for Excel 将智能功能——分割数据直接引入您的 Excel 环境。将数据分割到多个工作表不再是一个挑战。我们的直观工具会根据所选列值或行数自动划分数据集,确保每一条信息都准确无误地出现在您需要的地方。告别手动整理电子表格的繁琐任务,拥抱更快捷、无错误的数据管理方式。

注意:要应用此 分割数据 功能,首先,您应下载 Kutools for Excel,然后快速轻松地应用该功能。

安装 Kutools for Excel 后,选择数据区域,然后点击 Kutools Plus > 分割数据 打开 分割数据到多个工作表 对话框。

  1. 分割依据 部分选择 指定列 选项,并从下拉列表中选择要基于其分割数据的列值。
  2. 如果您的数据包含标题并且希望将其插入到每个新分割的工作表中,请勾选 我的数据包含标题 选项。(您可以根据数据指定标题行的数量。例如,如果您的数据包含两个标题,请输入 2。)
  3. 然后,您可以指定分割后工作表的名称,在 新工作表名 部分,从 规则 下拉列表中指定工作表名称规则,还可以为工作表名称添加 前缀后缀
  4. 点击 确定 按钮。请参见截图:
    split data into worksheets with kutools to set the operations

现在,工作表中的数据已分割到新工作簿中的多个工作表中。
split data into worksheets with kutools to get the result


使用 VBA 代码根据列值将数据分割到多个工作簿

有时,与其将数据分割到多个工作表中,不如根据关键列将数据分割到单独的工作簿中更有益处。以下是使用 VBA 代码自动化根据特定列值将数据分割到多个工作簿的过程的逐步指南。

1. 按住 ALT + F11 键打开 Microsoft Visual Basic for Applications 窗口。

2. 单击 插入 > 模块,并将以下代码粘贴到 模块窗口 中。

Sub SplitDataByColToWorkbooks()
    ' Updateby Extendoffice
    Dim lr As Long
    Dim ws As Worksheet
    Dim vcol, i As Integer
    Dim myarr As Variant
    Dim title As String
    Dim titlerow As Integer
    Dim xTRg As Range
    Dim xVRg As Range
    Dim xWS As Workbook
    Dim savePath As String
    ' Set the directory to save new workbooks
    savePath = "C:\Users\AddinsVM001\Desktop\multiple files\" ' Modify this path as needed
    Application.DisplayAlerts = False
    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.Address(False, False)
    titlerow = xTRg.Row
    ws.Columns(vcol).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=ws.Cells(1, ws.Columns.Count), Unique:=True
    myarr = Application.Transpose(ws.Cells(1, ws.Columns.Count).Resize(ws.Cells(ws.Rows.Count, ws.Columns.Count).End(xlUp).Row).Value)
    ws.Cells(1, ws.Columns.Count).Resize(ws.Cells(ws.Rows.Count, ws.Columns.Count).End(xlUp).Row).ClearContents
    For i = 2 To UBound(myarr)
        Set xWS = Workbooks.Add
        ws.Range(title).AutoFilter Field:=vcol, Criteria1:=myarr(i)
        ws.Range("A" & titlerow & ":A" & lr).SpecialCells(xlCellTypeVisible).EntireRow.Copy
        xWS.Sheets(1).Cells(1, 1).PasteSpecial Paste:=xlPasteAll
        xWS.SaveAs Filename:=savePath & myarr(i) & ".xlsx"

        xWS.Close SaveChanges:=False
    Next i
    ws.AutoFilterMode = False
    Application.DisplayAlerts = True
    ws.Activate
End Sub
注意:在上述代码中,您应该更改文件路径为您自己的路径,用于保存分割后的工作簿:savePath = "C:\Users\AddinsVM001\Desktop\multiple files\"

3. 然后,按下 F5 键运行代码,弹出一个提示框,提醒您选择标题行,然后单击 确定。请参见截图:
split data into workbooks with vba code to select header row

4. 在第二个提示框中,请选择要基于其分割的列数据,然后单击 确定。请参见截图:
split data into workbooks with vba code to select data range

5. 分割完成后,当前工作表中的所有数据都根据列值被分割到多个工作簿中。所有分割后的工作簿都被保存到您指定的文件夹中。请参见截图:
split data into workbooks with vba code to get the result

相关文章:

  • 按行数将数据分割到多个工作表
  • 根据特定行数将大型数据范围分割到多个 Excel 工作表中可以简化数据管理。例如,每隔 5 行将数据集分割到多个工作表中,可以使数据更易于管理和组织。本指南提供了两种实用方法,帮助您快速轻松地完成此任务。
  • 根据关键列合并两个或多个表格
  • 假设您在一个工作簿中有三个表格,现在您想根据对应的关键列将这些表格合并为一个表格,以获得如下截图所示的结果。这对我们大多数人来说可能是一项麻烦的任务,但请不要担心,本文将介绍一些解决此问题的方法。
  • 通过分隔符将文本字符串分割为多行
  • 通常情况下,您可以使用“文本转列”功能通过特定分隔符(如逗号、点、分号、斜杠等)将单元格内容分割为多列。但是,有时您可能需要将带分隔符的单元格内容分割为多行,并重复其他列中的数据,如下截图所示。您是否有任何好方法来处理 Excel 中的此任务?本教程将介绍一些有效的方法来完成此任务。
  • 将多行单元格内容分割为分离的行/列
  • 假设您有多行单元格内容,它们由 Alt + Enter 分隔,现在您需要将多行内容分割为分离的行或列,您该怎么办?本文将教您如何快速将多行单元格内容分割为分离的行或列。

最佳办公效率工具

🤖 Kutools AI 助手:基于智能执行生成代码创建自定义公式分析数据并生成图表调用 Kutools 函数等功能,彻底改变数据分析方式…
热门功能查找、高亮或标记重复项 | 删除空行 | 合并不丢失数据的列或单元格 | 四舍五入 ...
高级 LOOKUP多条件 VLookup | 多值 VLookup | 多表查找 | 模糊查找 ....
高级下拉列表快速创建下拉列表 | 从属下拉列表 | 多选下拉列表 ....
列管理器添加指定数量的列 | 移动列 | 切换隐藏列的可见状态 | 比较区域和列 ...
精选功能网格聚焦 | 设计视图 | 增强编辑栏 | 工作簿与工作表管理器 | 资源库(自动文本) | 日期提取 | 合并数据 | 加密/解密单元格 | 按列表发送电子邮件 | 超级筛选 | 特殊筛选(筛选粗体/斜体/删除线...)...
排名前 15 的工具集12 种文本 工具添加文本删除特定字符等) | 50 多 种图表 类型甘特图等) | 40 多种实用 公式基于生日计算年龄等) | 19 种插入 工具插入二维码根据路径插入图片等) | 12 种转换 工具小写金额转大写汇率转换等) | 7 种合并与分割 工具高级合并行分割单元格等) | 还有更多...

使用 Kutools for Excel 提升您的 Excel 技能,体验前所未有的高效。 Kutools for Excel 提供超过 300 种高级功能来提高生产力并节省时间。 单击此处获取您最需要的功能...


Office Tab 将标签式界面引入 Office,让您的工作更加轻松

  • 在 Word、Excel、PowerPoint 中启用标签式编辑和阅读
  • 在同一窗口的新标签页中打开和创建多个文档,而不是在新窗口中进行操作。
  • 将您的生产力提升 50%,每天为您减少数百次鼠标点击!