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
- Open Microsoft Word (any version)
- 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.
- Look along the top menu (where it says File / Home / etc.), find "Developer" then click on it.
- Click on "Macros"
- Type in a name at the top, doesn't matter what, like "CountAllWords" and click the Create button
- 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. - (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)
- Hit the Save icon and close the window
- Now open the document. Do to the Developer menu again. Click Macros again. Highlight the macro you created and hit the "Run" button.
- 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.
- 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.
- 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.