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.
How do I print formulas and results in Excel? Go to the formulas tab on the top bar. Click, "show formulas," click, "file," and then click, "print."
Try Excel Formula Beautifier http://excelformulabeautifier.com/. It pretty prints (aka beautifies) Excel formulas.
(I help maintain this, always looking for feedback to make it better.)
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. (EDIT: I had to look at some formulas recently, and I improved on what was here from my original answer, so I came back and changed it.)
Public Function ppf(f) As String
Dim formulaStr As String
If IsObject(f) Then
Debug.Assert TypeOf f Is Range
Dim rng As Range
Set rng = f
formulaStr = rng.Formula
Else
Debug.Assert VarType(f) = vbString
formulaStr = f
End If
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])
you don't have to worry about escaping your double quotes and so on. You'll get output that looks like this:
AC6+
AD6+
(
IF(
H6="Yes",
1,
IF(
J6="Yes",
1,
0)
)
)
+
IF(
X6="Yes",
1,
0)
You can also call it with a plain string.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With