Excel把一个工作表根据条件拆分成多个工作表

Excel 2016
参考https://jingyan.baidu.com/article/d7130635071d2313fdf47585.html

有时候需要在一个工作簿中建立多个工作表,并且需要自定义工作表的名称,手动的一个个双击表名去修改非常麻烦,特别是这次我需要建立一百多个表的时候。。。。

方法一:使用数据透视表功能

  • 插入->数据透视表

  • 选择表名数据区域,并且为新的区域

  • 把空白框中的待选项拖动到筛选框中

  • 数据透视表工具-> 选项->显示报表筛选页

  • 然后确定

方法二 使用VB写模块工具

总的数据表类似于

一个课号100多个学生,然后根据一个总的成绩表来建立每个学生的这样评分信息表,如果手动去复制粘贴就显得很麻烦了

所以就在上面的自动建立多个表的基础上,在建立的过程中把每个人的数据也自动的导入到每张表中方便使用。

ecxel 自定义模块

  • 首先需要启用宏功能
    文件-》选项-》信任中心-》信任中心设置-》宏设置-》启用所有宏

  • excel文件另存为启用宏的工作簿

  • 建立模块
    按alt+F11-》选项栏中选择 插入-》模块

这可以完美兼容office16,应该也可以在13上使用,但是在10版本上需要修改才可以使用,需要在excel2010上使用的直接拉到最后

把下面的代码复制粘贴到代码框中然后保存ctrl +S,直接关闭VB编辑窗口,回到主界面。

Sub CFGZB()
    Dim myRange As Variant
    Dim myArray
    Dim titleRange As Range
    Dim title As Variant
    Dim columnNum As Integer
    myRange = Application.InputBox(prompt:="请选择标题行:", Type:=8)
    myArray = WorksheetFunction.Transpose(myRange)
    Set titleRange = Application.InputBox(prompt:="请选择拆分的表头,必须是第一行,且为一个单元格,如:“姓名”", Type:=8)
    title = titleRange.Value
    columnNum = titleRange.Column
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Dim i&, Myr&, Arr, num&
    Dim d, k
    For i = Sheets.Count To 1 Step -1
        If Sheets(i).Name <> "数据源" Then
            Sheets(i).Delete
        End If
    Next i
    Set d = CreateObject("Scripting.Dictionary")
    Myr = Worksheets("数据源").UsedRange.Rows.Count
    Arr = Worksheets("数据源").Range(Cells(2, columnNum), Cells(Myr, columnNum))
    For i = 1 To UBound(Arr)
        d(Arr(i, 1)) = ""
    Next
    k = d.keys
    For i = 0 To UBound(k)
        Set conn = CreateObject("adodb.connection")
        conn.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties=Excel 12.0;Data Source=" & ThisWorkbook.FullName
        Sql = "select * from [数据源$] where " & title & " = '" & k(i) & "'"
        Worksheets.Add after:=Sheets(Sheets.Count)
        With ActiveSheet
            .Name = k(i)
            For num = 1 To UBound(myArray)
                .Cells(1, num) = myArray(num, 1)
            Next num
            .Range("A2").CopyFromRecordset conn.Execute(Sql)
        End With
        Sheets(1).Select
        Sheets(1).Cells.Select
        Selection.Copy
        Worksheets(Sheets.Count).Activate
        ActiveSheet.Cells.Select
        Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        Application.CutCopyMode = False
    Next i
    conn.Close
    Set conn = Nothing
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub
  • 在空白处右键 -》自定义功能区-》勾选开发工具

使用宏控件

  • 开发工具-》插入按钮,选择我们刚才的自定义的宏


    然后把我们的保存数据的表名称改为 数据源
    直接点击按钮根据提示操作

如果提示文本类型错误需要把作为表名称的数据存在数字类型改为文本类型。
然后卡一下就完成了

后续操作

把每个人数据建立成一个个人分析表

  • 全选工作表除了数据源,后面的操作都是在一个表操作,然后所有选中的工作表都会自动同步。
  • 把个人数据移动到合适位置
  • (第一次)复制粘贴模板

  • 如果出现格式不一致,需要在第一次粘贴过来,粘贴内容还在选中状态,点击 开始-》粘贴-》保持列宽。就可以还原原来的格式了。

  • 然后就是把刚才分表过程中分配过来的数据根据选项引用就行了

    • 在一个引用之后使用,选中刚才已经引用数据的单元格,在开始-》填充-》至同组工作表。就可以把所有的表的同个位置进行引用数据。
  • 其他的数据也是这样一个个的填,填完之后对表格区域选定,进行复制,然后不要动,直接选择 开始-》粘贴-》粘贴为值。再把引用的数据删除就ok了

excel2010版本

参考原作者https://jingyan.baidu.com/article/d7130635071d2313fdf47585.html

  • 数据格式报错修改方法
把原来的title定义
Dim title As String
修改wei
Dim title As Variant
  • sheets(i).delete这句代码出错,要拆分的数据工作表名称为“数据源”,而不是新建工作簿时的sheet1这种。手动改成“数据源”即可。
  • 12
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
以下是一个示例的VBA代码,用于将Excel工作簿拆分多个工作簿: ```vba Sub SplitWorkbook() Dim OriginalWorkbook As Workbook Dim NewWorkbook As Workbook Dim OriginalWorksheet As Worksheet Dim NewWorksheet As Worksheet Dim Cell As Range Dim RowCounter As Long Dim LastRow As Long Dim SplitColumn As Range Dim UniqueValues As Collection Dim Value As Variant ' 设置原始工作簿和工作 Set OriginalWorkbook = ThisWorkbook Set OriginalWorksheet = OriginalWorkbook.Worksheets("Sheet1") ' 替换为您要拆分工作名称 ' 设置拆分列范围 Set SplitColumn = OriginalWorksheet.Range("A:A") ' 替换为您要拆分的列 ' 获取唯一值集合 Set UniqueValues = New Collection On Error Resume Next For Each Cell In SplitColumn UniqueValues.Add Cell.Value, CStr(Cell.Value) Next Cell On Error GoTo 0 ' 遍历唯一值并创建新工作簿 For Each Value In UniqueValues ' 创建新工作簿并复制原始工作的结构和数据 Set NewWorkbook = Workbooks.Add Set NewWorksheet = NewWorkbook.Worksheets(1) OriginalWorksheet.Copy Before:=NewWorksheet ' 删除除唯一值之外的行 With NewWorksheet LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row For RowCounter = LastRow To 2 Step -1 ' 从最后一行开始往上遍历 If .Cells(RowCounter, 1).Value <> Value Then .Rows(RowCounter).Delete End If Next RowCounter End With ' 保存新工作簿 NewWorkbook.SaveAs "路径\" & Value & ".xlsx" ' 替换为您要保存的路径和文件名 ' 关闭新工作簿 NewWorkbook.Close SaveChanges:=False Next Value End Sub ``` 请注意,您需要根据实际情况进行以下修改: 1. 将`"Sheet1"`替换为您要拆分工作名称。 2. 将`"A:A"`替换为您要拆分的列范围。 3. 将`"路径\" & Value & ".xlsx"`替换为您要保存的路径和文件名。 运行此代码后,它将根据指定的列中的唯一值,将原始工作簿拆分多个新的工作簿,并将每个唯一值命名为文件名。每个新工作簿将只包含与对应唯一值匹配的行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值