15

この方法で数式を含む Excel ファイルがあります。

=IF(OR(ISERROR(G16),ISERROR(G17)),X16,IF(OR(G16="xxx",G16="yyy",G16="zzz"),Y16,IF(G16="333","N\A",IF(G17="333",Z16,IF(D17="",IF((HEX2DEC(W$10)-HEX2DEC(W16))/VLOOKUP(F16,$M$36:$N$41,2,FALSE)<0,0,(HEX2DEC(W$10)-HEX2DEC(W16))/VLOOKUP(F16,$M$36:$N$41,2,FALSE)), IF((HEX2DEC(W17)-HEX2DEC(W16))/VLOOKUP(F16,$M$36:$N$41,2,FALSE)<0,0,(HEX2DEC(W17)-HEX2DEC(W16))/VLOOKUP(F16,$M$36:$N$41,2,FALSE)))))))

より読みやすい方法で記述されるように、それらを単純化したいと思います。

  • Excel の数式をインデントして編集/記述できますか?
  • どのような簡素化を行うことができますか?
  • Excel の数式の代わりに VBA スクリプトを使用する必要がありますか?
4

9 に答える 9

11

数式バーで Alt+Enter を使用して、数式を複数行にすることができます。悲しいことに、スペースのみのタブがないため、作成と編集が面倒になります。こちらもご覧ください

http://www.dailydoseofexcel.com/archives/2005/04/01/excel-formula-formatter/

于 2012-10-03T18:55:02.470 に答える
4

ヘルパー列を使用した例として、次のように式を短縮できます

[A1]=VLOOKUP(F16,$M$36:$N$41,2,FALSE)

【B1】=HEX2DEC(W$10)

【C1】=HEX2DEC(W16)

[D1]=HEX2DEC(W17)

次に、大きな式は次のように短縮されます

=IF(OR(ISERROR(G16),ISERROR(G17)),X16,IF(OR(G16="xxx",G16="yyy",G16="zzz"),Y16,IF(G16="333","N\A",IF(G17="333",Z16,IF(D17="",IF((B1-C1)/A1<0,0,(B1-C1)/A1), IF((D1-C1)/A1<0,0,(D1-C1)/A1))))))

これは、DATE や NOW などの揮発性関数を使用する場合に特に効果的です。結果が同じ場合にすべてのセルを再計算する必要はありません。

読みやすいかどうかはわかりませんが、適切なコメントで列見出しにラベルを付けることができます

于 2012-10-03T18:18:48.243 に答える
3

ヘルパー列と名前付き範囲を組み合わせると、その式は非常に単純になります。

次の図では、名前付き範囲がどのように数式を整理できるかを示しています。

「prices」は範囲 A2:A7 の名前であり、「inflated_prices」は B2:B7 の名前であることに注意してください。

また、名前はインテリジェントであることに注意してください。sum(prices)は範囲全体を合計しますが=+prices*2、B2 では に解決され=+A2*2=+prices*2B3 では に解決さ=+A3*2れます。

ここに画像の説明を入力

于 2012-10-03T18:32:38.863 に答える
3

単一の式を維持しながら、式を大幅に簡素化できます。その部分でほぼ同じ表現を 4 回繰り返していHEX2DEC/VLOOKUPます。

=IF(式<0,0,式)

...と同等です

=MAX(0,数式)

[式の数値結果の場合]

そして、IF(D17="".....式をメインの数式内にネストする場合、つまりこのバージョン

=IF(ISERROR(G16&G17),X16,IF(OR(G16={"xxx","yyy","zzz"}), Y16,IF(G16="333","N\A",IF(G17="333",Z16,MAX(0,(HEX2DEC(IF(D17="",W$10,W17))-HEX2DEC(W16))/VLOOKUP(F16,$M$36:$N$41,2,0))))))

于 2012-10-03T19:03:33.517 に答える
2

VBA コードについて質問されたので、試してみようと思いました。確かに理解しやすく、保守しやすいですが、関数には 11 個の引数があるため、少し扱いに​​くいです。

Function Magic(d17 As Range _
                , f16 As Range _
                , g16 As Range _
                , g17 As Range _
                , w10 As Range _
                , w16 As Range _
                , w17 As Range _
                , x16 As Range _
                , y16 As Range _
                , z16 As Range _
                , m36 As Range) As Variant


    Dim a As Variant
    Dim b As Variant

    If IsError(g16.Value) Or IsError(g17.Value) Then
        Magic = x16.Value
        Exit Function
    End If

    If g16.Value = "xxx" Or g16.Value = "yyy" Or g16.Value = "zzz" Then
        Magic = y16.Value
        Exit Function
    End If

    If g16.Value = "333" Then
        Magic = "N\A"
        Exit Function
    End If

    If g17.Value = "333" Then
        Magic = z16.Value
        Exit Function
    End If

    If d17.Value = "" Then
        a = Application.WorksheetFunction.Hex2Dec(w10.Value) _
                - Application.WorksheetFunction.Hex2Dec(w16.Value)
        a = a / Application.WorksheetFunction.VLookup(f16.Value, m36, 2, False)
        If a < 0 Then
            Magic = 0
            Exit Function
        Else
            Magic = a
            Exit Function
        End If
    Else
        b = Application.WorksheetFunction.Hex2Dec(w17.Value) _
                - Application.WorksheetFunction.Hex2Dec(w16.Value)
        b = b / Application.WorksheetFunction.VLookup(f16.Value, m36, 2, False)
        If b < 0 Then
            Magic = 0
            Exit Function
        Else
            Magic = b
            Exit Function
        End If
    End If
End Function

数式のロジックを理解しやすくするために (セルが何を表しているかわかりませんでした)、セル参照の変数に名前を付けました。名前を意味のある名前に変更する必要があります。コードはモジュールに属します。

于 2012-10-05T07:28:11.320 に答える
1

そのような数式がある場合、意味のある応答を得るには、何を達成しようとしているのかについての明確な指示を含むサンプル ワークブックをフォーラムに投稿する必要があります。

はい、上記の回答のいくつかは、数式をよりよく表示する方法、余分なものを取り除く方法、または一部の VBA 内の複雑さを隠す方法を指摘しています (私の意見では、これは化粧品にのみ対応しており、おそらく大幅に増加したという点でかなりの費用がかかります)。再計算時間)。

しかし、式の意図と、それが置かれているワークブックの意図を知らなければ、多くのアドバイスしか提供できません。

ワークブックにこのような数式が何万もある場合は、数式の問題ではなく、データ構造の問題があります。最も効率的な処方は、回避される処方です。このワークブックをゼロから再設計して、Excel テーブル、ピボットテーブル、およびおそらく高度なフィルターを活用する場合は、このような数万の数式を避けることになります。おそらく数十万の数式。

于 2014-10-07T23:43:27.703 に答える
0

FormulaDesk は Windows でのみ動作します。

上記の FormulaDesk に加えて:

ここに FastExcel の現在の Beta 3 へのリンクがあります。しかし、それらは 10 年以上前から存在しているようです。29ドル。Windowsのみだと思います。サイトは不明です。

http://fastexcel.wordpress.com/2014/04/28/make-sense-of-complex-formulas-an-indenting-viewer-editer/

Precision Calc の同様の機能。$12 ときどき必要な場合は、Nagware の無料バージョンがあります。Windows のみ。

http://precisioncalc.com/tf/what_is_the_formulator.html

于 2014-10-07T13:59:35.827 に答える