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