ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-3-20 19:37 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 whlbliss 于 2017-3-20 19:39 编辑

根据某列(如附件中的A列)的数值,将电子表格拆分成以不重复的数值命名的电子簿xls(如附件中的A列,生成小王.xls、小东.xls  
                             . 2.png


小张.xls),并统计每个电子簿的数值部分(求平均值和求和)

1.png 拆分表格.rar (1.59 KB, 下载次数: 22)

TA的精华主题

TA的得分主题

发表于 2017-3-20 19:40 | 显示全部楼层
按列拆分的实例比比皆是>>>>>>>>

TA的精华主题

TA的得分主题

发表于 2017-3-20 19:40 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-20 19:43 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-20 19:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 whlbliss 于 2017-3-20 19:59 编辑


网上的资料很丰富,但我的要求有两个,一是  “命名”   要求,二是  “统计”   要求。

TA的精华主题

TA的得分主题

发表于 2017-3-20 20:00 | 显示全部楼层
whlbliss 发表于 2017-3-20 19:51
网上的资料很丰富,但我的要求有两个,意思  “命名”   要求,而是  “统计”   要求。

这是拆分成工作表的,有你要求的统计,你自己另存工作簿,可以吗?
  1. Private Sub CommandButton1_Click()
  2.     Dim tim1 As Date, tim2 As Date: tim1 = Timer
  3.     Dim arr, d As Object, sht As Worksheet
  4.     Set d = CreateObject("scripting.dictionary")
  5.     arr = [a1].CurrentRegion
  6.     For i = 1 To UBound(arr)
  7.         If Not d.exists(arr(i, 1)) Then
  8.             Set d(arr(i, 1)) = Range("a" & i).Resize(1, 5)
  9.         Else
  10.             Set d(arr(i, 1)) = Union(d(arr(i, 1)), Range("a" & i).Resize(1, 5))
  11.         End If
  12.     Next
  13.     x = d.keys
  14.     For k = 1 To UBound(x)
  15.         Set sht = ActiveWorkbook.Sheets.Add(, after:=ActiveSheet)
  16.         sht.Name = x(k)
  17.         d.items()(k).Copy sht.Range("a" & 2)
  18.         Rows("1:1").Copy sht.[a1]
  19.     Next
  20.     For Each sht In Sheets
  21.         If sht.Name <> "Sheet1" Then
  22.            With sht
  23.               k = .Cells(.Rows.Count, 1).End(xlUp).Row
  24.               arr = .[a1].CurrentRegion
  25.               For i = 2 To UBound(arr)
  26.                   For j = 3 To UBound(arr, 2)
  27.                      If IsNumeric(.Cells(i, j)) Then
  28.                          .Cells(k + 1, 1) = "平均": .Cells(k + 2, 1) = "合计"
  29.                          .Cells(k + 1, j) = Application.Average(Application.Index(arr, , j))
  30.                          .Cells(k + 2, j) = Application.Sum(Cells(i, j).Resize(i - 1, 1))
  31.                      End If
  32.                   Next
  33.               Next
  34.             End With
  35.         End If
  36.     Next
  37.     tim2 = Timer
  38.     MsgBox Format(tim2 - tim1, "拆分完成,共耗时:0.00秒"), 64, "时间统计"
  39. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2017-3-20 20:01 | 显示全部楼层
whlbliss 发表于 2017-3-20 19:51
网上的资料很丰富,但我的要求有两个,一是  “命名”   要求,二是  “统计”   要求。

这是拆分成工作表的,有你要求的统计,你自己另存工作簿,可以吗?
Private Sub CommandButton1_Click()
    Dim tim1 As Date, tim2 As Date: tim1 = Timer
    Dim arr, d As Object, sht As Worksheet
    Set d = CreateObject("scripting.dictionary")
    arr = [a1].CurrentRegion
    For i = 1 To UBound(arr)
        If Not d.exists(arr(i, 1)) Then
            Set d(arr(i, 1)) = Range("a" & i).Resize(1, 5)
        Else
            Set d(arr(i, 1)) = Union(d(arr(i, 1)), Range("a" & i).Resize(1, 5))
        End If
    Next
    x = d.keys
    For k = 1 To UBound(x)
        Set sht = ActiveWorkbook.Sheets.Add(, after:=ActiveSheet)
        sht.Name = x(k)
        d.items()(k).Copy sht.Range("a" & 2)
        Rows("1:1").Copy sht.[a1]
    Next
    For Each sht In Sheets
        If sht.Name <> "Sheet1" Then
           With sht
              k = .Cells(.Rows.Count, 1).End(xlUp).Row
              arr = .[a1].CurrentRegion
              For i = 2 To UBound(arr)
                  For j = 3 To UBound(arr, 2)
                     If IsNumeric(.Cells(i, j)) Then
                         .Cells(k + 1, 1) = "平均": .Cells(k + 2, 1) = "合计"
                         .Cells(k + 1, j) = Application.Average(Application.Index(arr, , j))
                         .Cells(k + 2, j) = Application.Sum(Cells(i, j).Resize(i - 1, 1))
                     End If
                  Next
              Next
            End With
        End If
    Next
    tim2 = Timer
    MsgBox Format(tim2 - tim1, "拆分完成,共耗时:0.00秒"), 64, "时间统计"
End Sub

TA的精华主题

TA的得分主题

发表于 2017-3-20 20:04 | 显示全部楼层
  1. Sub 保留表头拆分数据为若干新工作簿()
  2.     Dim arr, d As Object, k, t, i&, lc%, rng As Range, c%
  3.     c = Application.InputBox("请输入拆分列号", , 1, , , , , 1)
  4.     If c = 0 Then Exit Sub
  5.     Application.ScreenUpdating = False
  6.     Application.DisplayAlerts = False
  7.     arr = [a1].CurrentRegion
  8.     lc = UBound(arr, 2)
  9.     Set rng = [a1].Resize(, lc)
  10.     Set d = CreateObject("scripting.dictionary")
  11.     For i = 2 To UBound(arr)
  12.         If Not d.Exists(arr(i, c)) Then
  13.             Set d(arr(i, c)) = Cells(i, 1).Resize(1, lc)
  14.         Else
  15.             Set d(arr(i, c)) = Union(d(arr(i, c)), Cells(i, 1).Resize(1, lc))
  16.         End If
  17.     Next
  18.     k = d.Keys
  19.     t = d.Items
  20.     For i = 0 To d.Count - 1
  21.         With Workbooks.Add(xlWBATWorksheet)
  22.             rng.Copy .Sheets(1).[a1]
  23.             t(i).Copy .Sheets(1).[a2]
  24.             lr = .Sheets(1).Cells(65536, 1).End(xlUp).Row
  25.             .Sheets(1).Cells(lr + 1, 1) = "合计"
  26.             .Sheets(1).Cells(lr + 1, 3) = WorksheetFunction.Sum(.Sheets(1).Range("c2:c" & lr))
  27.             .Sheets(1).Cells(lr + 1, 4) = WorksheetFunction.Sum(.Sheets(1).Range("d2:d" & lr))
  28.             .Sheets(1).Cells(lr + 1, 5) = WorksheetFunction.Sum(.Sheets(1).Range("e2:e" & lr))
  29.             .SaveAs Filename:=ThisWorkbook.Path & "" & k(i) & ".xls"
  30.             .Close
  31.         End With
  32.     Next
  33.     Application.DisplayAlerts = True
  34.     Application.ScreenUpdating = True
  35.     MsgBox "完毕"
  36. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2017-3-20 20:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
.............

拆分表格.zip

30.85 KB, 下载次数: 23

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2017-3-20 20:07 | 显示全部楼层
whlbliss 发表于 2017-3-20 19:51
网上的资料很丰富,但我的要求有两个,一是  “命名”   要求,二是  “统计”   要求。

两个简单的零件,自己组装一下…………
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-2 05:11 , Processed in 0.049047 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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