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
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
5条答案
按热度按时间pgccezyw1#
尝试Excel公式美化器http://excelformulabeautifier.com/。它漂亮的打印(又名美化)Excel公式。
(我帮助维护这一点,总是寻找反馈,使它更好。
lyr7nygr2#
这段VBA代码不会赢得任何奖项,但它可以快速查看典型的公式。它只是做了你手动处理括号或分隔符的工作。将其插入代码模块,并从VBA立即窗口命令行调用它。(编辑:我最近不得不看一些公式,我改进了我原来的答案,所以我回来改变了它。
如果你这样称呼它:
你不必担心转义双引号等。你会得到如下输出:
您也可以使用普通字符串调用它。
hfwmuf9z3#
上面代码片段的这个版本现在也以不同的方式处理引号字符,这意味着,如果它们在字符串中,它不会让它们影响缩进:
它由布尔变量bInsideQuotes控制。
使最终用户能够看到他们所知道的内容。
gopyfrb34#
我只是通过使用VS Code sql-formatter扩展解决了这个问题。我只是简单地将我的公式粘贴到sql文件中,并使用sql-formatter进行格式化。
当我把这个归档的时候
结果是这样的:
它并不完美,但对我的口味来说是可以接受的。而且这可以复制并使用回Excel / Google表单。
0x6upsns5#
在2023年,到目前为止,最简单的方法就是安装微软自己的高级公式环境。除了漂亮的打印公式(然后可以复制粘贴到常规的公式栏中),它还有许多其他功能。转到“插入”选项卡,“获取加载项”,搜索“Excel实验室”。
我也衷心地推荐“公式锻造”插件作为评估公式的替代品。它使困难的公式更容易评估。