Excel把一个工作表根据条件拆分成多个工作表 |
您所在的位置:网站首页 › excel表格按人名拆分多个表 › Excel把一个工作表根据条件拆分成多个工作表 |
Excel 2016 参考https://jingyan.baidu.com/article/d7130635071d2313fdf47585.html 有时候需要在一个工作簿中建立多个工作表,并且需要自定义工作表的名称,手动的一个个双击表名去修改非常麻烦,特别是这次我需要建立一百多个表的时候。。。。 方法一:使用数据透视表功能方法二 使用VB写模块工具 ecxel 自定义模块使用宏控件 后续操作excel2010版本 方法一:使用数据透视表功能插入->数据透视表 选择表名数据区域,并且为新的区域 把空白框中的待选项拖动到筛选框中 ![]() 总的数据表类似于 一个课号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了 参考原作者https://jingyan.baidu.com/article/d7130635071d2313fdf47585.html 数据格式报错修改方法 把原来的title定义 Dim title As String 修改wei Dim title As Variant sheets(i).delete这句代码出错,要拆分的数据工作表名称为“数据源”,而不是新建工作簿时的sheet1这种。手动改成“数据源”即可。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |