views:

404

answers:

2

Does anyone know of a (free) tool to pretty print Excel formulas? A Google search didn't turn anything up.

I've got a few worksheets of semi-complex formulas to slog through, so this would make my life a bit easier.

I'm just looking to turn something like this

AC6+AD6+(IF(H6="Yes",1,IF(J6="Yes",1,0)))+IF(X6="Yes",1,0)

into something more readable without manually doing it in Vim or the like. Excel does do color-matching on the parentheses, but it's still all mashed together on one line.

+1  A: 

Here's a commercial solution that may work for you:

http://www.uts.us.com/ItemDetails.asp?ItemID=1100-40-0000-00

A trial version is apparently available.

richardtallent
Looks promising, thanks! I'll check it out.
Adam Neal
+1  A: 

This VBA code will win no awards, but it's O.K. for quickly looking at typical formulas. It just does what you'd do with parens or separators manually. Stick it in a code module and call it from the VBA immediate window command line.

Public Function ppf(formulaStr As String) As String

Dim tabs(0 To 99) As Long

Dim tabNum As Long
tabNum = 1

Dim tabOffset As Long

Dim i As Long
Dim c As String
For i = 1 To Len(formulaStr)
    c = Mid$(formulaStr, i, 1)

    If InStr("({", c) > 0 Then
        ppf = ppf & c

        tabNum = tabNum + 1
        tabs(tabNum) = tabs(tabNum - 1) + tabOffset + 1
        tabOffset = 0

        ppf = ppf & vbCrLf & Space(tabs(tabNum))
    ElseIf InStr(")}", c) > 0 Then
        tabNum = tabNum - 1
        tabOffset = 0

        ppf = ppf & c & vbCrLf & Space(tabs(tabNum))
    ElseIf InStr("+-*/^,;", c) > 0 Then
        tabOffset = 0

        ppf = ppf & c & vbCrLf & Space(tabs(tabNum))
    Else
        ppf = ppf & c

        tabOffset = tabOffset + 1
    End If
Next i

End Function

If you call it like so:

?ppf([q42].formula)

you don't have to worry about escaping your double quotes and so on. Unfortunately stackoverflow eats all my whitespace when I try to paste in the results of calling it...

jtolle
This is great, thanks! One question, am I supposed to call this from a cell? It doesn't like the **[cell].formula** part for some reason. If I copy the literal formula though, it works great!
Adam Neal
You'd have to tweak it for calling from a cell. As is, you'll just get back the string argument plus some unprintable characters because Excel doesn't treat the CR and LF the way VBA does. The ?ppf([q42].formula) would be what you type in the immediate window in the VBA development environment. '?' is just short for 'Debug.Print', and the brackets are short for 'Application.Evaluate(<string>)', so [q42] evaluates to the range $Q$42. Obviously, you will find that this routine fails to print the way you want in all kinds of cases, but it's adequate for quick inspection of your routine formulas.
jtolle
To call it from a cell, change the vbCrLf to vbLf, and set the cell you call it from to display wrapped text. You could also make the function take a range argument and then grab it's formula or formulaArray property.
jtolle
Oh, you mentioned calling it from the immediate window at the top of the answer...sorry, missed that. Thanks again for the help!
Adam Neal