Intro

Do you want to know if you overuse a word in your document? Want to know the frequency of every word in your manuscript? I found a fantastic macro online. You don't need to know how to code ANYTHING. All you need is Microsoft Word, you're good. Should be runnable in any version. Just follow the below directions. Doesn't matter if you even know what a "Macro" is.

Words (and phrases) you may want to consider reducing or removing from your manuscript:

  • just
  • really
  • very
  • maybe
  • may (not)
  • only
  • such
  • so
  • the fact that
  • point in time
  • in spite of
  • still
  • even
  • ever
  • never
  • trying to
  • try to
  • in order to
  • begin to
  • start to
  • in order to
  • find that
  • when
  • then
  • suddenly (and other redundant adverbs)
  • I saw / I thought / I realized / I believe / I heard (or other redundancies for first person work)

How To Do It

Here's the step by step

  1. Open Microsoft Word (any version)
  2. You need the "Developer" toolbar. Go to File > Options > Customize Ribbon. Look for "Developer" on the right side and check the checkbox. (If these instructions are not matching your version of word, it is a simple thing to Google. That's how I found it.
  3. Look along the top menu (where it says File / Home / etc.), find "Developer" then click on it.
  4. Click on "Macros"
  5. Type in a name at the top, doesn't matter what, like "CountAllWords" and click the Create button
  6. A window should pop up with a place for code. Here is where you can paste the following code, which I got from Tips.net


    				Sub CountMyWords()
    					Const maxwords = 9000          'Maximum unique words allowed
    					Dim SingleWord As String       'Raw word pulled from doc
    					Dim Words(maxwords) As String  'Array to hold unique words
    					Dim Freq(maxwords) As Integer  'Frequency counter for unique words
    					Dim WordNum As Integer         'Number of unique words
    					Dim ByFreq As Boolean          'Flag for sorting order
    					Dim ttlwds As Long             'Total words in the document
    					Dim Excludes As String         'Words to be excluded
    					Dim Found As Boolean           'Temporary flag
    					Dim j, k, l, Temp As Integer   'Temporary variables
    					Dim ans As String              'How user wants to sort results
    					Dim tword As String            '
    
    					' Set up excluded words
    					Excludes = "[the][a][of][is][to][for][by][be][and][are]"
    
    					' Find out how to sort
    					ByFreq = True
    					ans = InputBox("Sort by WORD or by FREQ?", "Sort order", "WORD")
    					If ans = "" Then End
    					If UCase(ans) = "WORD" Then
    						ByFreq = False
    					End If
    					
    					Selection.HomeKey Unit:=wdStory
    					System.Cursor = wdCursorWait
    					WordNum = 0
    					ttlwds = ActiveDocument.Words.Count
    
    					' Control the repeat
    					For Each aword In ActiveDocument.Words
    						SingleWord = Trim(LCase(aword))
    						'Out of range?
    						If SingleWord < "a" Or SingleWord > "z" Then
    							SingleWord = ""
    						End If
    						'On exclude list?
    						If InStr(Excludes, "[" & SingleWord & "]") Then
    							SingleWord = ""
    						End If
    						If Len(SingleWord) > 0 Then
    							Found = False
    							For j = 1 To WordNum
    								If Words(j) = SingleWord Then
    									Freq(j) = Freq(j) + 1
    									Found = True
    									Exit For
    								End If
    							Next j
    							If Not Found Then
    								WordNum = WordNum + 1
    								Words(WordNum) = SingleWord
    								Freq(WordNum) = 1
    							End If
    							If WordNum > maxwords - 1 Then
    								j = MsgBox("Too many words.", vbOKOnly)
    								Exit For
    							End If
    						End If
    						ttlwds = ttlwds - 1
    						StatusBar = "Remaining: " & ttlwds & ", Unique: " & WordNum
    					Next aword
    
    					' Now sort it into word order
    					For j = 1 To WordNum - 1
    						k = j
    						For l = j + 1 To WordNum
    							If (Not ByFreq And Words(l) < Words(k)) _
    							  Or (ByFreq And Freq(l) > Freq(k)) Then k = l
    						Next l
    						If k <> j Then
    							tword = Words(j)
    							Words(j) = Words(k)
    							Words(k) = tword
    							Temp = Freq(j)
    							Freq(j) = Freq(k)
    							Freq(k) = Temp
    						End If
    						StatusBar = "Sorting: " & WordNum - j
    					Next j
    
    					' Now write out the results
    					tmpName = ActiveDocument.AttachedTemplate.FullName
    					Documents.Add Template:=tmpName, NewTemplate:=False
    					Selection.ParagraphFormat.TabStops.ClearAll
    					With Selection
    						For j = 1 To WordNum
    							.TypeText Text:=Trim(Str(Freq(j))) _
    							  & vbTab & Words(j) & vbCrLf
    						Next j
    					End With
    					System.Cursor = wdCursorNormal
    					j = MsgBox("There were " & Trim(Str(WordNum)) & _
    					  " different words ", vbOKOnly, "Finished")
    				End Sub
    						



    You might notice an "Excludes" list as part of the above code. Honestly, this part did not work for me. No words were excluded when I ran the macro.
  7. (If given a choice in a dropdown, choosing "Normal.dotm" is a global location for this macro so you can run it from any document)
  8. Hit the Save icon and close the window
  9. Now open the document. Do to the Developer menu again. Click Macros again. Highlight the macro you created and hit the "Run" button.
  10. This macro will ask you whether to sort by WORD or FREQ, which is a nice feature, but it doesn't matter since you can go to Excel and do your own sorting later.
  11. Then WAIT. Could be 5 - 30 minutes and Word will appear to freeze or crash. It's probably not crashing, you just have to wait. Might be better to test it on a smaller doc first, just so you know what to expect.
  12. A fresh Word document will open with a simple list of words and numerical frequencies. What I like to do now is save this as a .txt file (to get rid of extraneous formatting) and then import the saved file to Excel as a tab-delimited document. Then I can sort, highlight, remove at will and figure out my problem words.