The Anchorage
Personal website of Gregory K. Maxey, Commander USN (Retired)
The information, illustrations and code contained in my "Microsoft Word Tips" are provided free and without risk or obligation.
However, the work is mine. If you use it for commercial purposes or benefit from my efforts through income earned or time saved then a donation, however small, will help to ensure the continued availability of this resource.
If you would like to donate, please use the appropriate donate button to access PayPal. Thank you!
This Microsoft Word Tips & Microsoft Word Help page simply adds to the field of tips and techniques for entering formatted fraction symbols in a Word document or applying formatting to pre-existing plain text fractions in your documents.
Word MVP Suzanne Barnhill has addressed most of the methods in detail in her Word FAQ article at: Create Fraction
Word MVP Graham Mayor has posted a very effective macro for converting plain text fractions like "1/5" into a formatted fraction like 1/5 in his article: Create a Fraction
This Tips page refines the macro referenced in Suzanne's article. It expands the scope to include fractions involving variables (e.g., x/y) and variable expressions (e.g., 12a/4b). The following illustrates how some example Word text will be processed using the macro:
Note1:
1. Expressions with a super\sub scripted numerator\denominator can be processed however the existing super\sub scripts are not processed further. For example a2/b2 processed appears as a2⁄b2.
2. Be careful with dates formatted mm/yy or mm/dd as the procedure will treat dates in this format as common fractions.
Public Sub FractionFormatter() Dim lngProcessed As Long System.Cursor = wdCursorWait lngProcessed = FormatFractions If lngProcessed = 0 Then MsgBox "No fractions where processed" Else MsgBox lngProcessed & " fractions were processed." End If System.Cursor = wdCursorNormal lbl_exit: Exit Sub End Sub Public Function FormatFractions(Optional Scope As Range) As Long Dim strSlashChr As String Dim oRng As Word.Range Dim oRngDivisor As Word.Range Dim oRngDividend As Word.Range Dim lngPosition As Long Dim oRngSymbol As Word.Range Dim bIsFraction As Boolean Dim strPrecede As String Dim strTrail As String Dim oFldRng As Word.Range Const strUrlText As String = "%#_|$/" If Scope Is Nothing Then Set Scope = ActiveDocument.StoryRanges(wdMainTextStory) strSlashChr = ChrW$(8260) Set oRng = Scope With oRng.Find .Text = "[A-Za-z0-9]{1,}^47[A-Za-z0-9]{1,}" .Forward = True .Wrap = wdFindStop .MatchWildcards = True While .Execute 'ID the location of the division symbol "/" lngPosition = InStr(oRng, "/") 'Define the range of the oRngDividend text Set oRngDividend = oRng.Duplicate oRngDividend.End = oRngDividend.Start + lngPosition - 1 'Difine the range of the oRngDivisor text Set oRngDivisor = oRng.Duplicate oRngDivisor.Start = oRngDivisor.Start + lngPosition 'Define the range of the division symbol Set oRngSymbol = oRng.Duplicate oRngSymbol.Start = oRngSymbol.Start + lngPosition - 1 oRngSymbol.End = oRngSymbol.Start + 1 'Found text is considered a fraction unless determined otherwise. bIsFraction = True 'Weed out false positives Set oFldRng = oRng.Duplicate oFldRng.Start = oFldRng.Start - 1 oFldRng.End = oFldRng.End + 1 'If found range is a part of a field it is probably a hyperlink or similar. _ Don't process it If oFldRng.Fields.Count > 0 Then bIsFraction = False End If 'ID the preceding and trailing chacter of the found text On Error GoTo Err_Handler strPrecede = oRngDividend.Characters.First.Previous.Text On Error GoTo 0 strTrail = oRngDivisor.Characters.Last.Next.Text 'Prevents processing dd/mm/yyyy formatted dates and other typical URL text If bIsFraction And InStr(1, strUrlText & ".?", strPrecede) > 0 Or _ InStr(1, strUrlText, strTrail) > 0 Then bIsFraction = False End If 'Explicitly process alpha and alphanumeric expressions. If bIsFraction And Not IsNumeric(oRngDividend.Text) Or _ bIsFraction And Not IsNumeric(oRngDivisor.Text) Then oRng.Select If MsgBox("Do you want to process this text as a fraction?", _ vbYesNo, oRng.Text) = vbNo Then bIsFraction = False End If End If 'Format the fraction If bIsFraction Then oRngDividend.Font.Superscript = True oRngDivisor.Font.Subscript = True oRngSymbol.Text = strSlashChr FormatFractions = FormatFractions + 1 End If oRng.Collapse wdCollapseEnd Wend End With Exit Function Err_Handler: 'There is no preceding character so create a dummy. strPrecede = " " Resume Next End Function
See: Installing Macros for instructions on how to set up and use the macros provided in this Microsoft Word Help & Microsoft Word Tips page.
That's it! I hope you have found this tips page useful and informative.
The information, illustrations and code contained in my "Microsoft Word Tips" are provided free and without risk or obligation.
However, the work is mine. If you use it for commercial purposes or benefit from my efforts through income earned or time saved then a donation, however small, will help to ensure the continued availability of this resource.
If you would like to donate, please use the appropriate donate button to access PayPal. Thank you!