漂亮的打印Excel公式?

aamkag61  于 2023-04-22  发布在  其他
关注(0)|答案(5)|浏览(167)

有谁知道一个(免费)工具来漂亮地打印Excel公式吗?谷歌搜索没有找到任何东西。
我有几个半复杂公式的工作表要费力地完成,所以这会让我的生活轻松一点。
我只是想把这样的东西

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

Excel确实对括号进行了颜色匹配,但它们仍然被混合在一行中。

pgccezyw

pgccezyw1#

尝试Excel公式美化器http://excelformulabeautifier.com/。它漂亮的打印(又名美化)Excel公式。
(我帮助维护这一点,总是寻找反馈,使它更好。

lyr7nygr

lyr7nygr2#

这段VBA代码不会赢得任何奖项,但它可以快速查看典型的公式。它只是做了你手动处理括号或分隔符的工作。将其插入代码模块,并从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)

您也可以使用普通字符串调用它。

hfwmuf9z

hfwmuf9z3#

上面代码片段的这个版本现在也以不同的方式处理引号字符,这意味着,如果它们在字符串中,它不会让它们影响缩进:

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

它由布尔变量bInsideQuotes控制。

.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
gopyfrb3

gopyfrb34#

我只是通过使用VS Code sql-formatter扩展解决了这个问题。我只是简单地将我的公式粘贴到sql文件中,并使用sql-formatter进行格式化。
当我把这个归档的时候

{=IFERROR(INDEX(names,SMALL(IF(groups=$E5,ROW(names)-MIN(ROW(names))+1),COLUMNS($E$5:E5))),"")}

结果是这样的:

{ = IFERROR(
  INDEX(
    NAMES,
    SMALL(
      IF(groups = $ E5, ROW(NAMES) - MIN(ROW(NAMES)) + 1),
      COLUMNS($ E $ 5 :E5)
    )
  ),
  ""
) }

它并不完美,但对我的口味来说是可以接受的。而且这可以复制并使用回Excel / Google表单。

0x6upsns

0x6upsns5#

在2023年,到目前为止,最简单的方法就是安装微软自己的高级公式环境。除了漂亮的打印公式(然后可以复制粘贴到常规的公式栏中),它还有许多其他功能。转到“插入”选项卡,“获取加载项”,搜索“Excel实验室”。
我也衷心地推荐“公式锻造”插件作为评估公式的替代品。它使困难的公式更容易评估。

相关问题