广告合作
  • 今日头条

    今日头条

  • 百度一下

    百度一下,你就知道

  • 新浪网

    新浪网 - 提供新闻线索,重大新闻爆料

  • 搜狐

    搜狐

  • 豆瓣

    豆瓣

  • 百度贴吧

    百度贴吧——全球领先的中文社区

  • 首页 尚未审核订阅工具 订阅

    帮忙做excel如何vba拆分工作表

    来源:网络收集  点击:  时间:2024-05-29
    【导读】:
    今天跟大家分享一下如何利用vba拆分工作表工具/原料moreExcel方法/步骤1/7分步阅读

    如下图是某年级两个班级成绩表,现在我们想要按照班级的不同将此工作表拆分为两个。

    2/7

    全选表格区域,然后同时按下Alt+F11

    3/7

    点击sheet1选项,然后在右边空白区域录入vba代码

    4/7

    点击【运行】,选择【运行宏】或者直接按下F5运行vba程序

    5/7

    在弹出对话框内输入A,然后点击【确定】

    6/7

    录入标题行数1,然后点击【确定】就可以完成了

    7/7

    完成效果如下图,最后跟大家分享一下本文这里使用的vba代码,如有需要可以复制粘贴使用。

    激活工作表事件激活工作表,写入除目录外所有表名作者:帮忙做Excel,请百度方方格子------------------------------------------Sub 拆分本表() 逐行复制,速度偏慢,通用性好Dim SplitCol As String, ColNum As Integer, HeadRows As ByteDim arr, lastrow, i, ShtIndexDim onlySet only = CreateObject(scripting.dictionary) Set only = New Collection-------------指定拆分条件所在列。可以根据实际情况修改列标Dim tmpXtmpX = Application.InputBox(请输入拆分条件所在列:, 指定拆分条件所在列, E, Type:=2)If tmpX = False Then Exit SubSplitCol = tmpX

    指定标题行数,该区域不参与拆分tmpX = Application.InputBox(指定标题行数,该区域不参与拆分, 标题行数, 1, Type:=1)If tmpX = False Then Exit SubHeadRows = tmpX-----------------If HeadRows = ActiveSheet.UsedRange.Rows.Count Then Exit Sub 如果指定的标题行大于已用区域行数则退出程序ColNum = Cells(1, SplitCol).Column 将列标转换成数字lastrow = ActiveSheet.UsedRange.Rows.Count 获取当前表已用区域的行数arr = Range(Cells(HeadRows + 1, SplitCol), Cells(lastrow, SplitCol)).Value 将拆分列的数据赋与变量arr-----------------On Error Resume NextFor i = 1 To lastrow - HeadRows 遍历arr所有数据 提取其中的不重复值 If Len(arr(i, 1)) 0 Then only.Add CStr(arr(i, 1)), CStr(arr(i, 1))Next iShtIndex = ActiveSheet.Index 获取当前表位置-----------------Dim ikeysikeys = only.keys-----------------On Error Resume NextFor i = 0 To only.Count - 1 Debug.Print Sheets(ikeys(i)).Name 获取与only对象中每个元素同名的工作表名(用意为判断是否存在该工作表) If Err = 0 Then MsgBox 当前工作簿已存在与待拆分项目同名的工作表 ikeys(i) ,暂无法拆分, 64, 友情提示: Exit Sub Err.ClearNext i-----------------Application.ScreenUpdating = False 关闭屏幕更新,加快执行速度Application.Calculation = xlCalculationManual 调为手动计算,加快执行速度For i = 0 To only.Count - 1 创建工作表,表的数量与表名由only对象中不重复值而定 Sheets.Add After:=Sheets(Sheets.Count) 创建 Sheets(Sheets.Count).Name = ikeys(i) 命名 Sheets(ShtIndex).Rows(1: HeadRows).Copy Sheets(Sheets.Count).Cells(1, 1) 复制标题Next i-----------------Sheets(ShtIndex).Select 返回被拆分的工作表For i = HeadRows + 1 To lastrow 逐行复制数据 If Len(Cells(i, SplitCol)) 0 Then 排除空值 With Sheets(Cells(i, SplitCol).Text).UsedRange.Rows(Sheets(Cells(i, SplitCol).Text).UsedRange.Rows.Count + 1) Rows(i).Copy .Cells(1) 第一次复制,复制所有数据,仅取其格式 .Cells = Rows(i : i).Value 第二次复制,仅复制数值 End With End IfNext i 第一列为空时,会有bug-----------------Application.ScreenUpdating = True 恢复屏幕更新Application.Calculation = xlCalculationAutomatic 恢复自动计算MsgBox 拆分完毕!, 64, 友情提示End Sub

    注意事项

    如有疑问可以点击下方【我有疑问】,与我沟通交流!!

    EXCELVBA拆分表格快速
    本文关键词:

    版权声明:

    1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

    2、本站仅提供信息发布平台,不承担相关法律责任。

    3、若侵犯您的版权或隐私,请联系本站管理员删除。

    4、文章链接:http://www.1haoku.cn/art_854156.html

    相关资讯

    ©2019-2020 http://www.1haoku.cn/ 国ICP备20009186号05-05 05:34:00  耗时:0.029
    0.0294s