返回

VBA一键将总表按任意列拆分为多个工作簿

Excel技巧

前言

大家好,我是星光。今天和大家分享的VBA小代码是:一键将总表按任意列拆分为多个工作簿。

什么意思呢?举个小栗子。如下图所示,是一张总表,现在需要按任意列,比如班级列吧,将它拆分为多个工作簿。

动画演示如下:

[动画演示]

VBA代码如下:

Sub SplitTableByColumn()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim rng As Range
    Dim col As Long
    Dim lastRow As Long
    Dim i As Long
    Dim newWb As Workbook

    Set wb = ThisWorkbook
    Set ws = wb.Worksheets("Sheet1")
    Set rng = ws.UsedRange

    ' 获取要拆分的列号
    col = Application.InputBox("请输入要拆分的列号:", "拆分列号", 1, Type:=1)

    ' 获取总表的最后一行
    lastRow = rng.Rows.Count

    ' 循环遍历每一行
    For i = 2 To lastRow
        ' 获取当前行的值
        val = rng.Cells(i, col).Value

        ' 如果当前行不为空
        If val <> "" Then
            ' 创建一个新的工作簿
            Set newWb = Workbooks.Add

            ' 将当前行数据复制到新工作簿
            rng.Rows(i).Copy newWb.Worksheets(1).Range("A1")

            ' 保存新工作簿
            newWb.SaveAs "C:\Users\Public\Desktop\" & val & ".xlsx"

            ' 关闭新工作簿
            newWb.Close
        End If
    Next i

    ' 提示操作完成
    MsgBox "拆分完成!"
End Sub

使用方法

  1. 将代码复制到VBA编辑器中。
  2. 在要拆分的总表中,选择要拆分的列。
  3. 运行代码。
  4. 输入要拆分的列号。
  5. 代码将自动将总表按选定的列拆分为多个工作簿。

注意要点

  • 拆分列号必须是数字,不能是字母或其他字符。
  • 拆分后的工作簿将保存在桌面上。
  • 代码默认将空行拆分为单独的工作簿。如果您不想拆分空行,可以在代码中添加以下代码:
If val <> "" Then
  • 您可以根据需要修改代码以适应您的特定需求。

结语

以上就是VBA一键将总表按任意列拆分为多个工作簿的代码。希望大家能够喜欢。如果您有任何问题,欢迎在下方留言。