漂亮的打印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公式。
(我帮助保持这一点,总是寻求反馈,使其更好。)
上述代码片段的这个版本现在也引用了不同的引用字符,这意味着,它将使它们保持独立,并且不会让它们影响缩进,如果它们在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