ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何用VBA代码计算文档中单词出现的频次及单词数

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-8-21 12:19 | 显示全部楼层
原帖由 tangqingfu 于 2010-8-21 10:23 发表
好像有些问题:
比如:
I'm OK. I like English. I’d like English. English is my favorite. That's Ok. That is right. Those are buses. These are bikes
用sylun兄8楼所说的操作,计算结果如下:
共有如下1 ...

关于这样的问题,其实前面也有所提及。表达式的匹配是含一个字母的字符串的,但不含'与s的组合(我想楼主应该知道为何要剔除这样的组合)。至于I’d之类的词,其中的撇号(')应是标准的39号编码字符,而楼主所用的可能是非标准的(外形上有直与弯之别)。
如下代码考虑了一个字母的单词及带弯撇号“单词”的问题,可试试,也可自行修改。至于其他有关单词的特殊判断问题,我不想再深入讨论了。抱歉。
Sub test2()
    Dim a As String, Dic As Object
    Dim myReg As Object, Matches As Object, Match As Object
    Dim k, i As Long, j As Long, temp As String, c As String
   
    a = ActiveDocument.Content.Text
    Set Dic = CreateObject("Scripting.Dictionary")
    Dic.CompareMode = vbTextCompare
    Set myReg = CreateObject("VBScript.RegExp")
    With myReg
        .Pattern = "[A-Za-z]+(['" & ChrW(8217) & "][A-RT-Za-rt-z]+|[A-Za-z]?)"
        .Global = True
        Set Matches = .Execute(a)
        For Each Match In Matches  '统计频次
            With Match
                If Len(.Value) > 1 Or .Value Like "[AIa]" Then  '剔除一个字母的匹配(I,a除外)
                    If Dic.Exists(.Value) Then Dic(.Value) = Dic(.Value) + 1 Else Dic.Add .Value, 1
                End If
            End With
        Next
        k = Dic.Keys  '获取各“单词”
        For i = 0 To UBound(k) - 1 '排序
            For j = i + 1 To UBound(k)
                If k(i) > k(j) Then
                    temp = k(i)
                    k(i) = k(j)
                    k(j) = temp
                End If
            Next
        Next
        For i = 0 To UBound(k)  '合并以用于输出
            c = c & k(i) & vbTab & Dic(k(i)) & Chr(13)
        Next
        Documents.Add.Content.Text = "共有如下" & Dic.Count & "个英文单词(含频次):" & Chr(13) & c
    End With
End Sub

[ 本帖最后由 sylun 于 2010-8-21 12:23 编辑 ]

TA的精华主题

TA的得分主题

发表于 2012-3-29 17:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
看了这个帖子受益不小。也按照这个思路做了一个简单的程序,实现了基本的功能。
特留贴纪念。

TA的精华主题

TA的得分主题

发表于 2014-12-11 18:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
学习了,谢谢分享。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-16 14:11 , Processed in 0.016302 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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