8

Excel の数式をきれいに印刷する (無料の) ツールを知っている人はいますか? Google 検索では何も表示されませんでした。

少し複雑な数式のワークシートがいくつかあるので、これで作業が少し楽になります。

私はちょうどこのような何かを回すために探しています

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

Vimなどで手動で行うことなく、より読みやすいものに変換できます。Excel はかっこでカラー マッチングを行いますが、それでもすべてが 1 行にまとめられています。

4

5 に答える 5

11

Excel Formula Beautifier http://excelformulabeautifier.com/をお試しください。Excel の数式をきれいに印刷 (美化) します。

(私はこれを維持するのを手伝っており、より良いものにするためのフィードバックを常に探しています。)

于 2012-05-29T13:59:27.983 に答える
4

この 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)

プレーンな文字列で呼び出すこともできます。

于 2009-09-19T00:34:08.767 に答える
1

これはあなたのために働くかもしれない商用ソリューションです:

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

試用版が利用できるようです。

于 2009-09-18T21:48:03.323 に答える
0

上記のコード スニペットのこのバージョンでは、引用符で囲まれた文字も異なる方法で処理されるようになりました。

"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
于 2015-04-29T12:33:49.750 に答える