ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 利用字典统计字符出现次数,并输出指定次数内的字符

利用字典统计字符出现次数,并输出指定次数内的字符

作者:绿色风 分类: 时间:2022-08-18 浏览:100
楼主
kevinchengcw
对于多文件指定字符出现频率的统计,利用字典实现不但速度快,而且可以充分利用字典的Item项来储存出现次数,良好的完成统计工作,示例代码如下:
  1. Sub test()
  2. Dim FN, Str As String
  3. Dim M, N, I As Integer
  4. Dim Arr
  5. Dim mFSO, TxtFile, Dic As Object
  6. Set mFSO = CreateObject("Scripting.FileSystemObject")  '创建FSO项目,用于打开文件
  7. Set Dic = CreateObject("scripting.dictionary")  '创建字典项目
  8. FN = Dir(ThisWorkbook.Path & "\*.txt")   '枚举当前目录下的文本文件名
  9. N = 0
  10. Do While FN <> ""  '循环打开找到的文本文件供数据采录
  11.     Set TxtFile = mFSO.OpenTextFile(ThisWorkbook.Path & "\" & FN, 1)  '打开文本文件
  12.     N = N + 1   '记录已操作的文本文件数量
  13.     Do Until TxtFile.atendofstream   '循环读取文本文件内容
  14.         Str = TxtFile.readline  '读取一行数据
  15.         If Dic.exists(Str) Then  '判断字典中是否已存在该数据
  16.             Dic(Str) = Dic(Str) + 1    '如果已有,则Item项的值加1
  17.         Else
  18.             Dic.Add Str,1    '否则以该数据为key加入字典,并将Item项计数1
  19.         End If
  20.     Loop
  21.     TxtFile.Close   '完成后关闭该文本文件
  22.     FN = Dir   '下一个文件
  23. Loop
  24. Set TxtFile = Nothing  '清空已用完的项目
  25. Set mFSO = Nothing   '清空已用完的项目
  26. M = 1  '设置数据写入的起始行号
  27. Arr = Dic.keys   '将字典的keys赋值给数组,便于取用
  28. Columns(1).ClearContents   '清空A列内容
  29. Columns(1).NumberFormatLocal = "000"    '按输出要求设置格式
  30. For I = LBound(Arr) To UBound(Arr)   '循环取数组项
  31.     If N - Dic(Arr(I)) >= [c4] And N - Dic(Arr(I)) <= [d4] Then   '如果数组中对应项的出现次数符合要求的范围
  32.         Cells(M, 1) = Arr(I)   '输出文本到A列
  33.         M = M + 1   '行数下移一行
  34.     End If
  35. Next I   '下一个数组项
  36. End Sub


详情请参阅附件
按允错值求交集.rar
2楼
freeliu
谢谢楼主啊。附件中的问题怎么实现啊?新手,实在不熟悉。拜托下。谢谢!
Book1.rar
3楼
lgb6699
清晰地说明,棒!
4楼
wise
学习了,记录下来

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap