[ACCEPTED]-Pretty Print Excel Formulas?-worksheet-function
Try Excel Formula Beautifier http://excelformulabeautifier.com/. It pretty 3 prints (aka beautifies) Excel formulas.
(I 2 help maintain this, always looking for feedback 1 to make it better.)
This VBA code will win no awards, but it's 12 O.K. for quickly looking at typical formulas. It 11 just does what you'd do with parens or separators 10 manually. Stick it in a code module and 9 call it from the VBA immediate window command 8 line. (EDIT: I had to look at some formulas 7 recently, and I improved on what was here 6 from my original answer, so I came back 5 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 4 don't have to worry about escaping your 3 double quotes and so on. You'll get output 2 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 1 with a plain string.
Here's a commercial solution that may work 1 for you:
http://www.uts.us.com/ItemDetails.asp?ItemID=1100-40-0000-00
A trial version is apparently available.
This version of the above code snippet now 7 also handels quoted characters differently, which 6 means, it leaves them alone and doesn't 5 let them effect the indenting if they are 4 inside a string like:
"This ({)},;+*-/ won't lead to a linebreak"
It is controlled by 3 the boolean variable bInsideQuotes. It also 2 uses
.FormulaLocal
to make it possible for Endusers to 1 see something they know.
Public Function prettyPrintFormula(f As Variant) As String
Dim formulaStr As String
Dim ppf As String
If IsObject(f) Then
Debug.Assert TypeOf f Is Range
Dim rng As Range
Set rng = f
formulaStr = rng.FormulaLocal
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
Dim bInsideQuotes As Boolean
bInsideQuotes = False
For i = 1 To Len(formulaStr)
c = Mid$(formulaStr, i, 1)
If InStr("""", c) > 0 Then
bInsideQuotes = Not bInsideQuotes
End If
If InStr("({", c) > 0 And Not bInsideQuotes 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 And Not bInsideQuotes Then
tabNum = tabNum - 1
tabOffset = 0
ppf = ppf & c & vbCrLf & Space(tabs(tabNum))
ElseIf InStr("+-*/^,;", c) > 0 And Not bInsideQuotes Then
tabOffset = 0
ppf = ppf & c & vbCrLf & Space(tabs(tabNum))
Else
ppf = ppf & c
tabOffset = tabOffset + 1
End If
Next i
prettyPrintFormula = ppf
End Function
I just solved the issue by using the VS 6 Code sql-formatter extension. I simply paste my formular 5 to a sql file and format with the sql-formatter.
When 4 I put this to file
{=IFERROR(INDEX(names,SMALL(IF(groups=$E5,ROW(names)-MIN(ROW(names))+1),COLUMNS($E$5:E5))),"")}
It comes out like that:
{ = IFERROR(
INDEX(
NAMES,
SMALL(
IF(groups = $ E5, ROW(NAMES) - MIN(ROW(NAMES)) + 1),
COLUMNS($ E $ 5 :E5)
)
),
""
) }
Its 3 not perfect but acceptable for my taste. And 2 this can be copied and used back into Excel 1 / google sheets.
More Related questions
We use cookies to improve the performance of the site. By staying on our site, you agree to the terms of use of cookies.