前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Word VBA技术:统计文档中每个字母字符的数量

Word VBA技术:统计文档中每个字母字符的数量

作者头像
fanjy
发布2023-02-24 21:03:41
2.1K0
发布2023-02-24 21:03:41
举报
文章被收录于专栏:完美Excel

标签:Word VBA

在某些情况下,可能想知道在文档中每个字母有多少个,即字母a-Z中每个有多少,或者可能想找出特定文本中最常用的字母。

本文包括两个VBA宏,计算Word文档中每个字母或其他字符的数量。

程序1:在对话框中显示结果,其中按指定的顺序显示每个字符的计数。

代码语言:javascript
复制
Sub FindNumberOfEachCharacterInActiveDocument_SortedAlphabetically()
 Dim strText As String
 Dim strTextNew As String
 Dim lngCount As Long
 Dim strInfo As String
 Dim strMsg As String
 Dim lngTotal As Long
 Dim strCharacters As String
 Dim strChar As String

 '为便于编辑要计数的字符列表,
 '列表定义为字符串,strCharacters.
 '按你的需要编辑这个字符串 - 例如,添加要统计的数字.
 '不区分大小写.

  strCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

  strMsg = ""
  strText = UCase(ActiveDocument.Range.Text)
  lngTotal = Len(strText)

  For lngCount = 1 To Len(strCharacters)
      '从strCharacters中获取字符
      strChar = Mid(strCharacters, lngCount, 1)

      '要获取出现的次数:
      '使用""代替strChar并计算不同的长度
      strTextNew = Replace(UCase(strText), strChar, "")
      strInfo = strChar & ":" & vbTab & lngTotal - Len(strTextNew) & vbCr
      '追加信息到消息框
      strMsg = strMsg & strInfo
  Next lngCount

  '在对话框显示信息
  strMsg = strMsg & vbCr & vbCr & _
    "主文档中字母数量: " & lngTotal
  '如果列表strCharacters没有按字母顺序排列,
  '你应该编辑下面的MsgBox标题
   MsgBox strMsg, vbOKOnly, "按字母顺序统计"
End Sub

程序2:在对话框中显示结果,其中按出现次数降序排列字符计数,即首先显示最常出现的字符。

代码语言:javascript
复制
Sub FindNumberOfEachCharacterInActiveDocument_SortedByOccurrences()
  Dim strText As String
  Dim strTextNew As String
  Dim lngCount As Long
  Dim strInfo As String
  Dim strMsg As String
  Dim lngTotal As Long
  Dim lngChar As Long
  Dim strCharacters As String
  Dim strChar As String
  Dim oDocTemp As Document
  Dim oTable As Table

  Application.ScreenUpdating = False

 '为便于编辑要计数的字符列表,
 '列表定义为字符串,strCharacters.
 '按你的需要编辑这个字符串 - 例如,添加要统计的数字.
 '不区分大小写.

  strCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

  strMsg = ""
  strText = UCase(ActiveDocument.Range.Text)
  lngTotal = Len(strText)

  '创建用于存储字符计数和执行排序的临时文档
  '阻止自动新建宏运行(如果找到)
  WordBasic.DisableAutoMacros 1
  Set oDocTemp = Documents.Add

 '插入用于为最终消息添加信息的表
  With oDocTemp
     .Range.Text = ""
     '插入2列表, 行数 = strCharacters的长度
     Set oTable = .Tables.Add(.Range, Len(strCharacters), 2)
  End With

 '添加strCharacters中每个字符的信息
  For lngCount = 1 To Len(strCharacters)
      '从strCharacters获取字符
      strChar = Mid(strCharacters, lngCount, 1)

      '要获取出现的次数:
      '使用""代替strChar并计算不同的长度
      strTextNew = Replace(UCase(strText), strChar, "")
      lngChar = lngTotal - Len(strTextNew)
      '在表中单元格2插入结果
      oTable.Cell(lngCount, 2).Range.Text = lngChar
     '在表中单元格1插入字符
      oTable.Cell(lngCount, 1).Range.Text = strChar
   Next lngCount

   '按列2排序表并转换成文本
   oTable.Sort ExcludeHeader:=False, FieldNumber:="Column 2", _
       SortFieldType:=wdSortFieldNumeric,
       SortOrder:=wdSortOrderDescending

   oTable.Rows.ConvertToText Separator:=wdSeparateByTabs
   '从oDocTemp存储文本, 准备在最终消息中使用
    strInfo = oDocTemp.Range.Text

    '不保存关闭oDocTemp
    oDocTemp.Close wdDoNotSaveChanges

    Application.ScreenUpdating = True

    '在对话框中显示信息
    strMsg = strInfo & vbCr & vbCr & _
       "主文档中字母数量: " & lngTotal
    MsgBox strMsg, vbOKOnly, "按字符统计数值降序排列"

    '清理
    Set oDocTemp = Nothing
    Set oTable = Nothing

    '再次启用自动运行宏
     WordBasic.DisableAutoMacros 0
End Sub

注意,这些程序只计算主文档中的内容,而不会统计页眉、页脚、尾注、脚注等中的字符。

你可以以这些代码为基础,统计其他字符的数量。例如,如果还想统计每个数字的数量,可以添加数字0-9。

如何修改程序来仅统计所选内容中的字符

要统计文档中所选内容的字符,将代码中的:

strText = UCase(ActiveDocument.Range.Text)

修改为:

strText = UCase(Selection.Text)

在运行程序前,需要选择想要统计的文档内容。

使用VBA统计字符总数

代码为:

ActiveDocument.Characters.Count

注:本文学习整理自thedoctools.com,供学习参考。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-01-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档