IF式を短縮するソリューションを探しています


9

次の構造を持つ長い式があります:

=IF(!X!<>0,!X!+A1,"")

どこ!X!非常に長い式です。

!X!の繰り返しを避けるための解決策はありますか?二回?2つの理由で必要です。

  1. シートのユーザーが数式を読みやすくするには
  2. 処理時間を短縮するには

どんな助けにも感謝します。

ありがとう、Dio


1
必要な場合はTo reduce the process time、結果をどこかに保存する必要があります。そうでない場合は、条件が一致したときにExcelで値を再計算する必要があります。除算も非常にコストのかかる操作です
phuclv 2017年

2
ちょうど好奇心が強い、あなたはできる限り長いフォーミュラを「ゴルフ」しましたか?短くするには、名前付き範囲を追加しますか?
BruceWayne 2017年

長い数式を読みやすくするには、alt + returnを使用して引数を異なる行に区切ります。1つの欠点は、ユーザーが数式バーの高さを広げないと、数式が不完全に見えることです。
Brad Smith

回答:


12

別のアプローチは二重反転を使用することです:

=IFERROR(1/(1/really_long_formula)+A1,"")

really_long_formulaの評価が0の場合、ゼロで除算され、それIFERROR()をキャッチします!

この要件を処理する通常の方法(および最良の方法)はヘルパーセルを使用することに注意してください。


7
浮動小数点除算により精度が失われる可能性があります
phuclv 2017年

3
@LưuVĩnhPhúc あなたは完全に正しいです!AFHアプローチが最善のアプローチであります!
ゲイリーの学生

これはいい、汚いトリックです。使用は極力控えますが、最後の手段として、誰が知っていますか?
アンドレ・Chalella

3
注:精度が低下する可能性があることは事実ですが、関連する問題になることはほとんどありません。1/1/xExcelで100,000個の乱数を数回テストしましたが、丸め誤差が発生したのは時間の1.4%だけでした。私が見つけた最大の相対誤差は1.6e-16でした。これは、事実上、ゼロです。また、興味深いことに、整数は丸め誤差を表示しませんでした(0から1e14までのいくつかの範囲をテストしました)。したがって、この答えは、純粋さ/清潔さの観点からは嫌われるかもしれませんが、実際の計算の観点からはそうではありません。
アンドレ・Chalella

1
私はゲイリーの解決策が最高だと思います。1つ目は、Andreでも言及されているようにクリーンで、他のユーザーが読み取れるためです。第二に、それは私のニーズを満たしているからです。複雑な整数や長い整数はありません。このアプローチを選択するユーザーがコメントを読んで、このソリューションの長所と短所を認識してほしいと思います。
ディオ

23

明白な答えは、数式をメインシートから離れた作業セルに配置することです。たとえば、を使用する場合は、次のようH1に設定します。

=!X!

次に、式は次のようになります。

=IF(H1<>0,H1+A1,"")

これは、他のプログラミング言語で行うことの典型です。


ヘルプ列を追加する可能性はありません。とにかくありがとう。
Dio

2
@Dio表示されない場合は、単に列を非表示にします。列/範囲に名前を付けて、読みやすくすることもできます
phuclv '24年

4
@Dio-OK。受け入れられた答えはかなり賢いですが、特に整数データを処理している場合は、丸めのために、正確さが失われる可能性があることに注意してください(1/(1/x)常にとまったく同じではありませんx)。また、より一般的には適用できません(たとえば、ゼロ未満かどうかのチェック)。(コメントは@LưuVĩnhPhúcの承認されていない回答と交差しました。)
AFH

あなたのアドバイスとコメントをありがとう。まだ新しい提案があるかどうかを確認するため、質問は開いたままにしておきます。
Dio

2
長い式を見ると参考になります。ワークセルのほかに、式を含むワークシートに名前を定義することができます
datatoo

3

""偽りのケースになるために結果が本当に必要ですか?あなただけのセルが必要な場合は見た目の空白を(例えば、あなたのようなものを使用しません=ISNUMBER()、あなたが使用することができ、後でその上を)条件付き書式を誤った場合の内容を非表示にします。

何も表示しないようにセルに適用する条件付きフォーマットは""、次のようなカスタムフォーマットです(ポルトガル語ですが、アイデアがわかります)。

空白セルのカスタム形式

セル内の数式は、予想通り、単純になり=!X!+A1ます。

条件付き書式の式はになる可能性があります=!X!=0!X!、これはの再計算を強制するため、望ましくありません(「ポイント2」)。を使用してセル自体を利用することをお=B1=A1勧めします(セルがB1であると想定)!X! = 0

セルの内容を実際ににする必要がある場合でも ""、通常、このアプローチを使用できるように、ワークシートに小さな変更を加えることができます。その場合は、状況を説明するコメントを残してください。


1

ヘルプ列を追加する可能性はありません。とにかくありがとう。

ヘルパー列を追加できない場合は、ワークシート全体を追加してみませんか?これにはいくつかの利点があります。

  • ヘルパーセルは別のワークシートにあるため、他の方法で使用される可能性のあるスペースを占有しません。
  • セルに名前を付けて、名前でアドレス指定できます。たとえば、=IF(X<>0,X+A1,"")
  • 複数のセルでこれを行う必要がある場合は、次のことができます。
    1. ヘルパーワークシートの名前を「ヘルパー」に変更します。
    2. ヘルパー方程式をメイン方程式と同じセルに配置します(これをと呼びましょうD5
    3. helper!D5メインシートのようにセルをアドレス指定します。
  • 必要に応じてヘルパーシートを非表示にできます。
  • 2回評価するよりも高速です。
  • 精度は失われません。

私が見ることができる欠点は次のとおりです。

  • のようsheetname!D5にではなく、メインシートの名前のないセルを参照する必要がありますD5
  • これで、数式は1つではなく2つの部分になりました。
  • ワークシートの急増。

長所と短所を比較検討すると、多くのユースケースでこれは良い解決策だと思います。今は考えられませんが、最適とは言えない状況もあります。


1
すばらしい答えです。私が見欠点がある:1。それは助けにはならない多くのことを、今、大きな式が隠されているので、ユーザーへのシンプルな計算を行うと。2.多くのワークブックはすでにシートで混雑しています。非表示にした場合でも、非表示にしないために多くの非表示のシートを通過する必要がある場合があります。それ以外は、良い解決策です。
アンドレ・Chalella

@AndréNevesありがとうございます!その最初の問題は私に起こりましたが、不利な点のセクションを書いているときに私はそれを忘れていました。
wizzwizz4

1

まだ提案されていないオプションは、ユーザー定義関数を作成することです。メニューバーの[開発]タブをオンにして(グーグルで)モジュールを作成する必要があります。

 public function udf_myCalc(ValueToAdd as double)
    dim myvar as double
    dim udf_myCalc as double
    myvar = .. put the logic of !X! in here

    if myvar<>0 then 
        udf_myCalc = myvar + ValueToAdd
    else
        udf_myCalc = ValueToAdd
    end if
 end function

次に、数式バーで次のようにします

=udf_myCalc(A1)

注:これは.xlsx(マクロ付き)ファイルになり、悪意のある目的でマクロが使用され、一部の電子メールフィルターによってそれらがブロックされるため、企業ネットワークで追加の権限が必要になる場合があります。関数は文書化されていないので、関数が何をしているかについてのメモを提供する必要があります。組み込み関数ではないことが明確になるように、すべての関数をudf_xxxxxと呼ぶと便利です。

UDFを備えた他のGOTCHAもあります。いくつかの良いヒントについては、このリンクを参照して くださいhttp://www.decisionmodels.com/calcsecretsj.htm

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.