ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: rookie2021

[求助] 根据A列公司名称拆分工作簿

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-8-13 13:52 | 显示全部楼层
Sub test()
    Application.ScreenUpdating = False
    '统计数据行数,列数
    Dim myRow As Long, myCol As Long
    myRow = Sheet1.[a4].End(xlDown).Row
    myCol = 11
   
    '建字典,存子公司名称
    Dim d As Object
    Set d = CreateObject("Scripting.Dictionary")
    For i = 4 To myRow
        d(Sheet1.Cells(i, 1).Value) = d(Sheet1.Cells(i, 1).Value) + 1  '统计每个子公司的记录数
    Next
   
    '清理旧表
    Application.DisplayAlerts = False
    Dim mySht As Worksheet
    For Each mySht In Sheets
        If mySht.Name <> "Sheet1" Then mySht.Delete
    Next
    Application.DisplayAlerts = True
   
    '复制记录到每张子表
    Dim item
    For Each item In d                                        '每个子公司逐个上场
        Sheets("Sheet1").Copy After:=Sheets(Sheets.Count)     '先拷贝总表
        Set mySht = Sheets(Sheets.Count)
        mySht.Name = item                                     '改个名就是俺的表
        mySht.Activate                                        '进自家地盘
        For j = myRow To 4 Step -1                            '逐个甄别,开始大清洗
            If Cells(j, 1).Value <> item Then Rows(j).Delete  '不是俺公司的就滚蛋
        Next
    Next
    Sheet1.Activate
    Application.ScreenUpdating = True
    MsgBox "OK"
End Sub

总表分成子表.zip

95.45 KB, 下载次数: 5

TA的精华主题

TA的得分主题

发表于 2024-8-13 13:57 | 显示全部楼层
jaxxcyh 发表于 2024-8-13 13:24
数据库这玩意太高级,看不懂

你是要看懂,还是要解决问题?

TA的精华主题

TA的得分主题

发表于 2024-8-13 14:40 | 显示全部楼层
刚开始学,结合老师的代码修改的,但是没有合计行

拆分工作簿.rar

53.51 KB, 下载次数: 5

TA的精华主题

TA的得分主题

发表于 2024-8-14 20:17 | 显示全部楼层

学习一下
  1. Sub ykcbf()'筛选 删除行
  2.    
  3.     Dim 编号02_字典
  4.     Dim 编号04_工作表
  5.     Dim 编号05_文件夹路径
  6.     Dim 编号06_标题行数
  7.     Dim 编号07_按第几列拆分
  8.     Dim 编号08_列数
  9.     Dim 编号09_合计在第几行
  10.     Dim 编号10_数组
  11.     Dim 编号11_第几行
  12.     Dim 编号12_字符串
  13.     Dim 编号13_key

  14.     Set 编号02_字典 = CreateObject("scripting.dictionary")
  15.     Set 编号04_工作表 = ThisWorkbook.Sheets("Sheet1")
  16.     编号05_文件夹路径 = ThisWorkbook.Path & ""
  17.     编号06_标题行数 = 3
  18.     编号07_按第几列拆分 = 1
  19.    
  20.     编号08_列数 = 编号04_工作表.UsedRange.Columns.Count
  21.     编号09_合计在第几行 = 编号04_工作表.UsedRange.Find("合计").Row
  22.     编号10_数组 = 编号04_工作表.[a1].Resize(编号09_合计在第几行, 编号08_列数)
  23.     For 编号11_第几行 = 编号06_标题行数 + 1 To UBound(编号10_数组, 1)
  24.         变量 = 编号10_数组(编号11_第几行, 编号07_按第几列拆分)
  25.         编号12_字符串 = Trim(变量)
  26.         If 编号12_字符串 <> "" Then
  27.             编号02_字典(编号12_字符串) = ""
  28.         End If
  29.     Next
  30.    
  31.     For Each 编号13_key In 编号02_字典.keys
  32.         编号04_工作表.Copy
  33.         
  34.         ActiveWorkbook.Sheets(1).AutoFilterMode = 0
  35.         ActiveWorkbook.Sheets(1).DrawingObjects.Delete
  36.         ActiveWorkbook.Sheets(1).Rows(编号06_标题行数 & ":" & 编号06_标题行数).AutoFilter
  37.         ActiveWorkbook.Sheets(1).Cells(编号06_标题行数, 1).AutoFilter Field:=编号07_按第几列拆分, Criteria1:="<>" & 编号13_key
  38.         ActiveWorkbook.Sheets(1).Cells(编号06_标题行数 + 1, 1).Resize(编号09_合计在第几行).EntireRow.Delete
  39.         ActiveWorkbook.Sheets(1).AutoFilterMode = 0
  40.         
  41.         ActiveWorkbook.SaveAs 编号05_文件夹路径 & 编号13_key
  42.         ActiveWorkbook.Close
  43.     Next
  44.    
  45. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2024-8-15 10:09 | 显示全部楼层
limonet 发表于 2024-8-13 09:39
Sub limonet()
    Dim Cn As Object, StrSQL$, Arr As Variant, i%, CS$
    Set Cn = CreateObject("Ad ...

学习一下
  1. Sub limonet()'sql

  2.     Dim 编号01_Connection
  3.     Dim 编号02_字符串
  4.     Dim 编号03_数组200
  5.     Dim 编号04_第几列
  6.     Dim 编号05_Sql
  7.     Dim 编号06_文件路径
  8.     Dim 编号07_文件路径
  9.     Dim 编号08_Recordset
  10.     Dim 编号09_Sql
  11.     Dim 编号10_字符串
  12.    
  13.     Set 编号01_Connection = CreateObject("Adodb.Connection")
  14.    
  15.     编号02_字符串 = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0 xml;HDR=NO';Data Source="
  16.     编号06_文件路径 = ThisWorkbook.FullName
  17.     编号01_Connection.Open 编号02_字符串 & 编号06_文件路径
  18.    
  19.     编号09_Sql = "Select Distinct F1 From [Sheet1$A4:K] Where F1<>''"
  20.     Set 编号08_Recordset = 编号01_Connection.Execute(编号09_Sql)
  21.    
  22.     编号03_数组200 = 编号08_Recordset.GetRows
  23.    
  24.     编号01_Connection.Close
  25.    
  26.     For 编号04_第几列 = 0 + 1 To UBound(编号03_数组200, 2) + 1
  27.         
  28.         编号10_字符串 = 编号03_数组200(0, 编号04_第几列 - 1)
  29.         编号07_文件路径 = ThisWorkbook.PATH & "" & 编号10_字符串 & ".xlsx"
  30.         编号01_Connection.Open 编号02_字符串 & 编号07_文件路径
  31.         
  32.         编号05_Sql = "Select * Into 工作表名称 From [Excel 12.0;HDR=NO;Database=" & ThisWorkbook.FullName & "].[Sheet1$A4:K] Where F1='" & 编号10_字符串 & "'"
  33.         Set 编号08_Recordset = 编号01_Connection.Execute(编号05_Sql)
  34.         
  35.         编号01_Connection.Close
  36.         
  37.     Next
  38.    
  39. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-18 12:23 , Processed in 0.041319 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表