生成唯一词列表(Microsoft Word)
Isao想知道是否有一种方法可以轻松地构造文档中所有唯一单词的列表。他不需要知道每个单词出现多少次。他只需要一列独特的单词。此外,同一单词的大写和小写变体应计为同一单词。
没有内置的Word功能或工具可以执行此操作。但是,在VBA中,您可以访问Words集合,其中包括文档中的所有单词。考虑到这一点,您可以创建一个宏,该宏在文档中建立一个唯一单词的排序列表,然后将这些单词添加到文档的末尾。
Sub UniqueWordList() Dim wList As New Collection Dim wrd Dim chkwrd Dim sTemp As String Dim k As Long For Each wrd In ActiveDocument.Range.Words sTemp = Trim(LCase(wrd)) If sTemp >= "a" And sTemp <= "z" Then k = 0 For Each chkwrd In wList k = k + 1 If chkwrd = sTemp Then GoTo nw If chkwrd > sTemp Then wList.Add Item:=sTemp, Before:=k GoTo nw End If Next chkwrd wList.Add Item:=sTemp End If nw: Next wrd sTemp = "There are " & ActiveDocument.Range.Words.Count & " words " sTemp = sTemp & "in the document, before this summary, but there " sTemp = sTemp & "are only " & wList.Count & " unique words." ActiveDocument.Range.Select Selection.Collapse Direction:=wdCollapseEnd Selection.TypeText vbCrLf & sTemp & vbCrLf For Each chkwrd In wList Selection.TypeText chkwrd & vbCrLf Next chkwrd End Sub
请注意,文档中的每个单词都被提取出来,转换为小写,然后按排序顺序添加到wList集合中。
仅当单词是字母时才添加单词(因此,不包括数字,也包括标点符号),并且宏不注意单词的大小写。您还应该注意,宏仅查看文档主体中的单词。它在诸如页眉,页脚,文本框或形状之类的位置不包含任何单词。
可以轻松更改宏以适应各种需求。例如,您可以让宏将单词表粘贴到单独的文档中,而不是放在当前文档的末尾。您需要做的就是在此处第二行显示的出口行之前插入此行:
sTemp = "There are " & ActiveDocument.Range.Words.Count & " words " sTemp = sTemp & "in " & ActiveDocument.Name & ", but there " sTemp = sTemp & "are only " & wList.Count & " unique words." Documents.Add ActiveDocument.Range.Select Selection.Collapse Direction:=wdCollapseEnd Selection.TypeText vbCrLf & sTemp & vbCrLf For Each chkwrd In wList Selection.TypeText chkwrd & vbCrLf Next chkwrd End Sub
请注意,宏中只有一个实质性更改:添加了“ Documents.Add”方法以创建用于摘要的新文档。
有关将单词从文档中取出的其他想法(包括计算单词频率的宏),您可能需要参考此技巧:
注意:
如果您想知道如何使用此页面(或_WordTips_网站上的任何其他页面)中描述的宏,我准备了一个包含有用信息的特殊页面。
_WordTips_是您进行经济有效的Microsoft Word培训的来源。
(Microsoft Word是世界上最流行的文字处理软件。)本技巧(7697)适用于Microsoft Word 2007、2010、2013和2016。