ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 根据某列拆分成一个个xls文件,并统计

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-20 20:10 | 显示全部楼层
lsc900707 发表于 2017-3-20 20:01
这是拆分成工作表的,有你要求的统计,你自己另存工作簿,可以吗?
Private Sub CommandButton1_Click() ...

谢谢您的代码,能成功拆分成表,但提示 For i = 2 To UBound(arr)  类型不匹配

TA的精华主题

TA的得分主题

发表于 2017-3-20 20:14 | 显示全部楼层
  1. Option Explicit
  2. Sub D()
  3. Application.DisplayAlerts = False
  4. Dim D As New Dictionary
  5. Dim I, K, X As Integer
  6. Dim 路径 As String
  7. Dim N As Worksheet
  8. Dim SHT As Worksheet
  9. Dim A()
  10. Dim B()
  11. Set N = ActiveSheet
  12. K = N.Range("A32767").End(xlUp).Row
  13. A = N.Range("A2:A" & K)
  14. For I = LBound(A) To UBound(A)
  15.     D(A(I, 1)) = ""
  16. Next
  17. B = WorksheetFunction.Transpose(D.Keys)
  18. For I = LBound(B) To UBound(B)
  19.     Sheets.Add AFTER:=Sheets(Sheets.Count)
  20.     Sheets(Sheets.Count).Name = B(I, 1)
  21. Next
  22. N.Select
  23. For Each SHT In Sheets
  24.     If SHT.Name <> N.Name Then
  25.         N.Range("A1:E" & K).AutoFilter FIELD:=1, Criteria1:=SHT.Name
  26.         N.Range("A1:E" & K).Copy SHT.Range("A1")
  27.         X = SHT.Range("A32767").End(xlUp).Row
  28.         SHT.Range("A" & X + 1) = "合计"
  29.         SHT.Range("C" & X + 1) = WorksheetFunction.Sum(SHT.Range("C:C"))
  30.         SHT.Range("D" & X + 1) = WorksheetFunction.Sum(SHT.Range("D:D"))
  31.         SHT.Range("E" & X + 1) = WorksheetFunction.Sum(SHT.Range("E:E"))
  32.     End If
  33. Next
  34. N.Range("A1:E" & K).AutoFilter
  35. 100
  36. 路径 = InputBox("请输入路径")
  37. If 路径 = "" Then
  38.     GoTo 100
  39. End If
  40. For Each SHT In Sheets
  41.     If SHT.Name <> N.Name Then
  42.         SHT.Copy
  43.         ActiveWorkbook.SaveAs Filename:=路径 & SHT.Name & ".xls"
  44.         ActiveWorkbook.Close
  45.     End If
  46. Next
  47. For Each SHT In Sheets
  48.     If SHT.Name <> N.Name Then
  49.         SHT.Delete
  50.     End If
  51. Next
  52. Application.DisplayAlerts = True
  53. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-20 20:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
jiminyanyan 发表于 2017-3-20 20:07
两个简单的零件,自己组装一下…………

非常感谢,但我是菜鸟,不知道在哪里赏花。还请赐教。学会了赏花,以后就能感谢更多的好心人。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-20 20:31 | 显示全部楼层
lsc900707 发表于 2017-3-20 20:01
这是拆分成工作表的,有你要求的统计,你自己另存工作簿,可以吗?
Private Sub CommandButton1_Click() ...

谢谢您的代码,让我茅塞顿开!

TA的精华主题

TA的得分主题

发表于 2017-3-20 20:31 | 显示全部楼层
whlbliss 发表于 2017-3-20 20:24
非常感谢,但我是菜鸟,不知道在哪里赏花。还请赐教。学会了赏花,以后就能感谢更多的好心人。

帖子右下角点击“评分”就可以了。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2017-3-20 20:48 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
whlbliss 发表于 2017-3-20 20:24
非常感谢,但我是菜鸟,不知道在哪里赏花。还请赐教。学会了赏花,以后就能感谢更多的好心人。

花就算了,没什么用处………………。

TA的精华主题

TA的得分主题

发表于 2017-3-20 21:29 | 显示全部楼层
whlbliss 发表于 2017-3-20 20:10
谢谢您的代码,能成功拆分成表,但提示 For i = 2 To UBound(arr)  类型不匹配

代码放数据工作表代码区就行,按钮用activex 控件按钮,我测试没问题。
这是另存工作簿的,能保持列宽不变:
Private Sub CommandButton1_Click()
    Set rng = Range("a1:e1")
    Application.ScreenUpdating = False
    arr = Range("a1:e" & Range("a65536").End(xlUp).Row)
    Set d = CreateObject("scripting.dictionary")
    For i = 2 To UBound(arr)
         If Not d.exists(arr(i, 1)) Then
                Set d(arr(i, 1)) = Cells(i, 1).Resize(1, 5)
            Else
                Set d(arr(i, 1)) = Union(d(arr(i, 1)), Cells(i, 1).Resize(1, 5))
         End If
    Next
    k = d.keys: t = d.items
    For x = 0 To d.Count - 1
        Set wb = Workbooks.Add(xlWBATWorksheet)
        With wb.Sheets(1)
            rng.Copy .[a1]: t(x).Copy .[A2]
            arr = .[a1].CurrentRegion
            n = .Cells(65536, 1).End(xlUp).Row
            For m = 3 To UBound(arr, 2)
                If IsNumeric(.Cells(n, m)) Then
                    .Cells(n + 1, 1) = "平均": .Cells(n + 2, 1) = "合计"
                    .Cells(n + 1, m) = Application.Average(Application.Index(arr, , m))
                    .Cells(n + 2, m) = Application.Sum(Cells(n, m).Resize(n - 1, 1))
                    .Columns(m).ColumnWidth = ThisWorkbook.ActiveSheet.Columns(m).ColumnWidth
                End If
            Next
        End With
        wb.SaveAs Filename:=ThisWorkbook.Path & "\" & k(x), FileFormat:=xlExcel8
        wb.Close
    Next
    Application.ScreenUpdating = True
    Set rng = Nothing: Set wb = Nothing
    MsgBox "完毕"
End Sub

TA的精华主题

TA的得分主题

发表于 2017-3-20 21:30 | 显示全部楼层
whlbliss 发表于 2017-3-20 20:10
谢谢您的代码,能成功拆分成表,但提示 For i = 2 To UBound(arr)  类型不匹配
  1. Private Sub CommandButton1_Click()
  2.     Set rng = Range("a1:e1")
  3.     Application.ScreenUpdating = False
  4.     arr = Range("a1:e" & Range("a65536").End(xlUp).Row)
  5.     Set d = CreateObject("scripting.dictionary")
  6.     For i = 2 To UBound(arr)
  7.          If Not d.exists(arr(i, 1)) Then
  8.                 Set d(arr(i, 1)) = Cells(i, 1).Resize(1, 5)
  9.             Else
  10.                 Set d(arr(i, 1)) = Union(d(arr(i, 1)), Cells(i, 1).Resize(1, 5))
  11.          End If
  12.     Next
  13.     k = d.keys: t = d.items
  14.     For x = 0 To d.Count - 1
  15.         Set wb = Workbooks.Add(xlWBATWorksheet)
  16.         With wb.Sheets(1)
  17.             rng.Copy .[a1]: t(x).Copy .[A2]
  18.             arr = .[a1].CurrentRegion
  19.             n = .Cells(65536, 1).End(xlUp).Row
  20.             For m = 3 To UBound(arr, 2)
  21.                 If IsNumeric(.Cells(n, m)) Then
  22.                     .Cells(n + 1, 1) = "平均": .Cells(n + 2, 1) = "合计"
  23.                     .Cells(n + 1, m) = Application.Average(Application.Index(arr, , m))
  24.                     .Cells(n + 2, m) = Application.Sum(Cells(n, m).Resize(n - 1, 1))
  25.                     .Columns(m).ColumnWidth = ThisWorkbook.ActiveSheet.Columns(m).ColumnWidth
  26.                 End If
  27.             Next
  28.         End With
  29.         wb.SaveAs Filename:=ThisWorkbook.Path & "" & k(x), FileFormat:=xlExcel8
  30.         wb.Close
  31.     Next
  32.     Application.ScreenUpdating = True
  33.     Set rng = Nothing: Set wb = Nothing
  34.     MsgBox "完毕"
  35. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2017-3-20 21:42 | 显示全部楼层
模块3的代码


拆分表格.zip (20.18 KB, 下载次数: 13)

TA的精华主题

TA的得分主题

发表于 2017-3-25 11:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
阿打算打打。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-22 22:28 , Processed in 0.033124 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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