漂亮的打印Excel公式?

有谁知道一个(免费)工具漂亮打印Excel公式? 谷歌search没有改变任何事情。

我有一些半复杂公式的工作表,可以让我的生活更轻松一些。

我只是想把这个东西变成这样

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

变成更可读的东西,而不用在Vim或类似的东西里手动做。 Excel确实在圆括号上进行了颜色匹配,但是它仍然在一行上全部被拼凑在一起。

这个VBA代码将不会赢得奖励,但可以快速查看典型的公式。 它只是做你会做的parens或分离手动。 将其粘贴在代码模块中,并从VBA立即窗口命令行调用它。 (编辑:我最近不得不看一些公式,我改进了原来的答案,所以我回来改变了。)

 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 

如果你这样称呼它:

 ?ppf([q42]) 

你不必担心逃避你的双引号等等。 你会得到这样的输出:

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

你也可以用一个普通的string来调用它。

尝试Excel Formula Beautifier http://excelformulabeautifier.com/ 。 它漂亮打印(又名美化)Excel公式。

(我帮助保持这一点,总是寻求反馈,使其更好。)

以下是适合您的商业解决scheme:

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

试用版显然是可用的。

上述代码片段的这个版本现在也引用了不同的引用字符,这意味着,它将使它们保持独立,并且不会让它们影响缩进,如果它们在string中,如:

 "This ({)},;+*-/ won't lead to a linebreak" 

它由布尔variablesbInsideQuotes控制。 它也使用

 .FormulaLocal 

使最终用户能够看到他们所知道的东西。

 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