ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

[复制链接]

TA的精华主题

TA的得分主题

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

老师,早上好!
我凑了以下这段代码,您帮忙看看,如果将字典的结果,HZ、SL 按 SL 从大到小排序的结果,另存为一个 word 档?
Sub TeaHorseRoad()
Dim i As Integer
Dim HanZi
Dim Ta As Paragraph

Application.ScreenUpdating = False
ST = Timer

Set HanZi = CreateObject("Scripting.Dictionary")

   With ActiveDocument
   
   For Each Ta In .Paragraphs
   With Ta.Range.Find
    .Execute "[!一-龥^11^13]", , , 1, , , , , , "", 2
   End With

            j = Ta.Range.Characters.Count
            For i = 1 To j
                XT = Ta.Range.Characters(i)
                If XT <> vbCr Then
      If HanZi.Exists(XT) = False Then
         HanZi.Add XT, 1
               Else
         HanZi.Item(XT) = HanZi.Item(XT) + 1
     End If
     End If


Next
Next

HZ = HanZi.Keys

SL = HanZi.Items

End With

MsgBox "Done!共" & Format(Timer - ST, "0.00") & "秒"

End Sub

TA的精华主题

TA的得分主题

发表于 2019-8-26 21:42 | 显示全部楼层
可试试
  1. Sub test()
  2.     '计算活动文档的各汉字出现次数并排序
  3.     Dim i As Integer
  4.     Dim myRegexp As Object
  5.     Dim Matches As Object
  6.     Dim Match As Object
  7.     Dim d As Object
  8.     Dim key As Variant
  9.     Dim CNchar() As String
  10.    
  11.     Set myRegexp = CreateObject("VBScript.Regexp")
  12.     With myRegexp
  13.         .Global = True
  14.         .Pattern = "[\u4E00-\u9FA5]"
  15.         Set Matches = .Execute(ActiveDocument.Content.Text)
  16.     End With
  17.    
  18.     Set d = CreateObject("Scripting.Dictionary")
  19.     For Each Match In Matches
  20.         d(Match.Value) = d(Match.Value) + 1
  21.     Next
  22.     key = d.keys
  23.     ReDim CNchar(UBound(key))
  24.     For i = 0 To UBound(key)
  25.         CNchar(i) = key(i) & vbTab & d(key(i))
  26.     Next
  27.         
  28.     Application.ScreenUpdating = False
  29.     With Documents.Add.Content
  30.         .Text = "汉字" & vbTab & "字频" & vbCrLf & Join(CNchar, vbCrLf)
  31.         .Sort True, 2, wdSortFieldNumeric, wdSortOrderDescending, 1, wdSortFieldSyllable, wdSortOrderAscending
  32.     End With
  33.     Application.ScreenUpdating = True
  34. End Sub

复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-27 09:17 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-27 09:40 | 显示全部楼层

老师,您好!
发现其中有些汉字不能被统计到,比如:&#151331;,

TA的精华主题

TA的得分主题

发表于 2019-8-27 21:36 | 显示全部楼层
praijna 发表于 2019-8-27 09:40
老师,您好!
发现其中有些汉字不能被统计到,比如:&#151331;,

这个可能涉及到扩展字库和代码页等汉字编码方面知识,没有研究。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-28 09:30 | 显示全部楼层
sylun 发表于 2019-8-27 21:36
这个可能涉及到扩展字库和代码页等汉字编码方面知识,没有研究。

好的,感恩老师!

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-29 07:24 | 显示全部楼层
sylun 发表于 2019-8-27 21:36
这个可能涉及到扩展字库和代码页等汉字编码方面知识,没有研究。

老师,早上好!
您的那句 set matches=.execute(Activedocument.contnt.text),能否反过来用,包含以下代码运行之后的结果数据:
With ActiveDocument.Range.Find
    .Execute "[!一-龥^11^13^32]", , , 1, , , , , , "", 2
   End With



感恩!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-3 17:43 , Processed in 0.041273 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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