Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 4035|回复: 16

[已解决]求助统计文件类型数量的VBA,各位老师辛苦了

[复制链接]
发表于 2013-7-29 14:15 | 显示全部楼层 |阅读模式
一个文件夹中包含有若干个命名有规则的EXCEL文件,现在想统计一下各种类型文件和各个单位的数量。将统计结果放入“统计表”中。示例文件夹中,只简单罗列几个文件做附件。
需要统计的文件命名规则为:A+单位编码(6位数字)+编号(四位);B+单位编码(6位数字)+编号(四位) ;C+单位编码(6位数字)+编号(四位) ; D+单位编码(6位数字)+编号(四位) ,共四中文件类型A、B、C、D,每类文件又分为16个单位(编码依次031000、031001、。。。。。031015),想按照文件类型和单位不同,分别统计各单位中各类文件的数量。见示例。

谢谢了
示例.rar (21.85 KB, 下载次数: 17)
发表于 2013-7-29 15:20 | 显示全部楼层
楼主:是不是想要这样的?见附件!要启用宏(即把宏安全性设置成“低”),点击按钮完成。

示例.rar

28.07 KB, 下载次数: 9

回复

使用道具 举报

发表于 2013-7-29 15:25 | 显示全部楼层
  1. Sub SumFile()
  2.     Dim arr()
  3.     Dim i As Long
  4.     Dim arrCol, arrResult()
  5.     Dim strGroup As String * 1, strCompany As String * 6
  6.     Dim strPath As String, strFile As String
  7.     Dim lRow As Long, lCol As Long
  8.     Dim objDic As Object
  9.    
  10.     Application.ScreenUpdating = False
  11.     arrCol = Array(2, 10, 16, 21)
  12.     i = Cells(Rows.Count, 1).End(xlUp).Row
  13.     arr = Range("a6:b" & i).Value

  14.     Set objDic = CreateObject("scripting.dictionary")
  15.     For i = LBound(arr) To UBound(arr)
  16.         objDic(arr(i, 1)) = i
  17.     Next

  18.     ReDim arrResult(1 To UBound(arr), 1 To UBound(arrCol) + 1)
  19.     For i = 65 To 68
  20.         objDic(Chr(i)) = i - 64
  21.     Next


  22.     strPath = ThisWorkbook.Path & Application.PathSeparator
  23.     strFile = Dir(strPath & "*.xls")

  24.     Do While Len(strFile)
  25.         If strFile <> ThisWorkbook.Name Then
  26.             strGroup = Left(strFile, 1)
  27.             strCompany = Mid(strFile, 2, 6)
  28.             If objDic.exists(strGroup) And objDic.exists(strCompany) Then
  29.                 lCol = objDic(strGroup)
  30.                 lRow = objDic(strCompany)
  31.                 arrResult(lRow, lCol) = arrResult(lRow, lCol) + 1
  32.                 Debug.Print strFile & ":" & strGroup & ":" & strCompany & ":" & lRow & ":" & lCol
  33.             End If
  34.         End If
  35.         strFile = Dir
  36.     Loop
  37.     For i = LBound(arrCol) To UBound(arrCol)
  38.         Cells(6, arrCol(i)).Resize(UBound(arrResult)).Value = WorksheetFunction.Index(arrResult, 0, i + 1)
  39.     Next
  40.     Set objDic = noting
  41.     Application.ScreenUpdating = True
  42.     MsgBox "汇总完成", vbInformation + vbOKOnly
  43. End Sub
复制代码
回复

使用道具 举报

发表于 2013-7-29 15:36 | 显示全部楼层    本楼为最佳答案   
本帖最后由 zjdh 于 2013-8-1 13:52 编辑

示例.rar (29.03 KB, 下载次数: 45)
回复

使用道具 举报

发表于 2013-7-29 15:41 | 显示全部楼层
本帖最后由 zjdh 于 2013-8-1 13:49 编辑
  1. Sub test()
  2.     Set D = CreateObject("scripting.dictionary")
  3.     ARR = Range("A6:A" & Range("A65536").End(3).Row)
  4.     ReDim BRR(1 To UBound(ARR), 1 To 4)
  5.     FL = Dir(ThisWorkbook.Path & "\*.xls")
  6.     Do While FL <> ""
  7.         If FL <> ThisWorkbook.Name Then  D(Left(FL, 7)) = D(Left(FL, 7)) + 1
  8.         FL = Dir
  9.     Loop
  10.     K = D.KEYS
  11.     For I = 1 To UBound(ARR)
  12.         For J = 0 To UBound(K)
  13.             If ARR(I, 1) = Right(K(J), 6) Then  BRR(I, Asc(Left(K(J), 1)) - 64) = D(K(J))
  14.         Next
  15.     Next
  16.     For I = 1 To UBound(BRR)
  17.         Cells(I + 5, 2) = BRR(I, 1)
  18.         Cells(I + 5, 10) = BRR(I, 2)
  19.         Cells(I + 5, 16) = BRR(I, 3)
  20.         Cells(I + 5, 21) = BRR(I, 4)
  21.     Next
  22. End Sub
复制代码

评分

参与人数 1 +18 收起 理由
sliang28 + 18 算法想一块去了

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2013-7-31 21:38 | 显示全部楼层
ligh1298 发表于 2013-7-29 15:20
楼主:是不是想要这样的?见附件!要启用宏(即把宏安全性设置成“低”),点击按钮完成。

你好,您给的示例,点击后  好像 B开头的数量 里面加上了 A开头的数量,数据不太对,您再给看看
回复

使用道具 举报

 楼主| 发表于 2013-7-31 21:40 | 显示全部楼层
本帖最后由 zhycl 于 2013-7-31 21:57 编辑
zjdh 发表于 2013-7-29 15:36

老师,我在实际应用中A开头的表个数达到26个了,B开头的有14个,C开头1个,D开头10个,我是这么做的,下载您的示例,把我的表全部拷贝到里面,和我自己新建一张统计表,写入您给的代码得到的结果都一样,如下:用示例得到的结果,只有A开头的数量,其他的一概没有数量
求解
回复

使用道具 举报

 楼主| 发表于 2013-7-31 22:26 | 显示全部楼层
hwc2ycy 发表于 2013-7-29 15:25

请教老师,您给的代码  我运行后提示   “运行时错误 424  要求对象”  改怎么解决啊
回复

使用道具 举报

发表于 2013-7-31 22:45 | 显示全部楼层
zhycl 发表于 2013-7-31 22:26
请教老师,您给的代码  我运行后提示   “运行时错误 424  要求对象”  改怎么解决啊

不知道你实际应用时的情况,没法判断问题在哪,或者你出错时点调试看看代码停在哪一行了。
回复

使用道具 举报

 楼主| 发表于 2013-7-31 23:04 | 显示全部楼层
hwc2ycy 发表于 2013-7-31 22:45
不知道你实际应用时的情况,没法判断问题在哪,或者你出错时点调试看看代码停在哪一行了。

我点击运行后,出现如下: QQ截图20130731230337.jpg 然后,点击确定,就什么提示也没有了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 15:03 , Processed in 0.394712 second(s), 16 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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