ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 繁体字文章中汉字使用频率的统计方法(VBA)感恩 sylun 老师帮助!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-8-22 14:37 | 显示全部楼层 |阅读模式
本帖最后由 praijna 于 2019-8-29 07:16 编辑

各位老师:
       恳请老师提供“繁体字文章中汉字使用频率的统计方法(VBA)”!









感恩!


TA的精华主题

TA的得分主题

发表于 2019-8-22 21:30 | 显示全部楼层
本帖最后由 413191246se 于 2019-8-22 21:38 编辑

* 楼主,我觉得繁体字和简体字统计字频应该是一样的,请做一个小型示例文档,检测试用一下我编的宏:(如果正式应用于大型文档,可能运行时间较长,请耐心等待,不要动键盘和鼠标。如果不满意,请等待高人援手)
  1. Sub test字频统计()
  2.     Dim i&, j&, t$, n&, s$, x&
  3.     With ActiveDocument
  4.         x = .Paragraphs.Count
  5.         j = .Characters.Count
  6.         For i = 1 To j
  7.             t = .Characters(i)
  8.             If t = vbCr Then GoTo sk
  9.             If t = ChrW(160) Then GoTo sk
  10.             If t = vbTab Then GoTo sk
  11.             If t Like "[,;:、。“!?”  ]" Then GoTo sk
  12.             If .Characters(i).Font.Color = wdColorRed Then GoTo sk
  13.             With .Content.Find
  14.                 .ClearFormatting
  15.                 .Text = t
  16.                 .Forward = True
  17.                 .MatchWildcards = True
  18.                 Do While .Execute
  19.                     With .Parent
  20.                         n = n + 1
  21.                         .Font.Color = wdColorRed
  22.                         .Start = .End
  23.                     End With
  24.                 Loop
  25.             End With
  26.             s = s & t & " " & n & vbTab
  27.             n = 0
  28. sk:
  29.         Next i
  30.     End With
  31.     Selection.EndKey 6
  32.     Selection.TypeText Text:=vbCr & s
  33. '''
  34.     With ActiveDocument
  35.         .Paragraphs.Last.Range.Find.Execute "^9", , , , , , , , , "^p", 2
  36.         .Paragraphs.Last.Range.Delete
  37.         .Range(Start:=ActiveDocument.Paragraphs(x + 1).Range.Start, End:=ActiveDocument.Content.End).Select
  38.     End With
  39. '
  40.     With Selection
  41.         .ConvertToTable Separator:=4, NumColumns:=2, AutoFitBehavior:=wdAutoFitFixed
  42.         .Tables(1).Style = "网格型"
  43. '
  44.         .Sort ExcludeHeader:=False, FieldNumber:="列 2", SortFieldType:= _
  45.             wdSortFieldNumeric, SortOrder:=wdSortOrderDescending, FieldNumber2:="", _
  46.             SortFieldType2:=wdSortFieldSyllable, SortOrder2:=wdSortOrderAscending, _
  47.             FieldNumber3:="", SortFieldType3:=wdSortFieldSyllable, SortOrder3:= _
  48.             wdSortOrderAscending, Separator:=wdSortSeparateByCommas, SortColumn:= _
  49.             False, CaseSensitive:=False, LanguageID:=wdSimplifiedChinese, _
  50.             SubFieldNumber:="段落数", SubFieldNumber2:="段落数", SubFieldNumber3:="段落数"
  51.     End With
  52.     MsgBox "处理完毕!!!!!!!!!!", 0 + 48, "字频统计"
  53. End Sub
复制代码


TA的精华主题

TA的得分主题

发表于 2019-8-22 22:00 | 显示全部楼层
本帖最后由 daibao88 于 2019-8-22 22:12 编辑

建议str = ActiveDocument.range.Text  ,Replace 替换标点符号等为空
不停的Replace  替换 str第一个字符为空,并记录(该字符及替换前后的str长度差,就是改字符的数量)入数组,直至str为空
数组排序 输出结果
在内存操作,应该比在文档操作更快一些吧,并且因为替换为空,循环次数最少。
个人愚见,未试。

TA的精华主题

TA的得分主题

发表于 2019-8-22 23:46 | 显示全部楼层
daibao88 老师:您的思路算法极好!不过,我不会数组排序等,故我只能出文档代码,更好的内存操作代码还须老师亲自出。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-23 09:38 | 显示全部楼层
413191246se 发表于 2019-8-22 21:30
* 楼主,我觉得繁体字和简体字统计字频应该是一样的,请做一个小型示例文档,检测试用一下我编的宏:(如果 ...

老师,早上好!
我有用过守柔老师的那个统计代码,会有部分繁体字统计不到。正在运行您给的代码!

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-23 09:40 | 显示全部楼层
daibao88 发表于 2019-8-22 22:00
建议str = ActiveDocument.range.Text  ,Replace 替换标点符号等为空
不停的Replace  替换 str第一个字符 ...

老师,您好!
能否麻烦您给一下代码?

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-23 13:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
413191246se 发表于 2019-8-22 21:30
* 楼主,我觉得繁体字和简体字统计字频应该是一样的,请做一个小型示例文档,检测试用一下我编的宏:(如果 ...

试了一段比较难的繁体文字,结果是正确的,感恩老师!

TA的精华主题

TA的得分主题

发表于 2019-8-23 20:55 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-8-23 21:50 | 显示全部楼层
函数、数组、字典、递归、类……都不会,戴老师 讲得太高级!

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-25 12:08 | 显示全部楼层
413191246se 发表于 2019-8-23 21:50
函数、数组、字典、递归、类……都不会,戴老师 讲得太高级!

您的方法是可行的,只是执行速度太慢,我学一下用字典看看。感恩!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-20 07:57 , Processed in 0.039977 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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