私は Excel スプレッドシートをできるだけきれいな状態に保つようにしています。そのため、次のような文を書くことがよくあります。
IF([formula x]=[value],"",[formula x])
本質的には、数式が特定の条件に一致する場合は結果を表示せず、そうでない場合は結果を表示することを意味します。
場合によっては、[formula x]
セルの列全体に繰り返され、各セル[formula x]
にはその上のセルを指す参照が含まれます。数式エラーを回避するには、次のように別のレイヤーを追加する必要があります。
IF(C2="","",IF([formula x]=[value],"",[formula x])
ただし、特に が[formula x]
非常に長い場合、最終的な数式が実際よりもはるかに複雑に見え、トラブルシューティングや保守が予想以上に困難になる可能性があります。
ここに恐ろしい例が一つあります...
基本式:
=IF(A3>=$E$11,C2+(C2*($F$2/12))-$E$9,C2+(C2*($F$2/12))-$E$7)
条件付きブランクを追加します。
=IF(C2="","",IF(IF(A3>=$E$11,C2+(C2*($F$2/12)-$E$9),C2+(C2*($F$2/12))-$E$7)<=0,"",IF(A3>=$E$11,C2+(C2*($F$2/12))-$E$9,C2+(C2*($F$2/12))-$E$7)))
すでに非常に長い数式は、同じ数式が特定の条件を満たしたときに空白 (または選択した他の値) を表示できるようにするために、サイズが 2 倍以上に拡大されます。これを行全体で実行しようとすると、開始数式によっては、循環参照エラーに簡単に遭遇する可能性があります。
同じセル内の既存の数式または引数を自己参照する方法はありますか? あるいは、この結果をよりきれいに達成するために使用できる別の関数または機能はありますか?
私が探している機能を実行する関数は次のようになります。
=FnName([base formula],[match condition],[condition result])
引数 1 は基本式、引数 2 は一致させたい条件です。引数 3 は条件が一致した場合に表示される結果です。条件が一致しない場合は、関数は基本式の結果を返します。
答え1
非表示のセル (または別のワークシートのセル) の数式を評価し、数式を 2 回入力する代わりに、非表示のセルの値に基づいて条件付き空白化を行うことを考えたことはありますか。作業中のコンテキスト全体はわかりませんが、過去に同様のことを行って成功したことがあります。
答え2
VBA 関数を使用して数式の構文を整理することもできます。たとえば、次のようなものをモジュールに配置できます ( Alt+ を押してF11、[挿入] >> [モジュール] を選択)。
Option Explicit
Public Function BLANKIF(checkcell As String, notb As Variant, Optional checkcond As String) As Variant
If checkcell = checkcond Then
BLANKIF = ""
Else
BLANKIF = notb
End If
End Function
これを使って条件付きブランキングを適用するには
=IF(A3>=$E$11,C2+(C2*($F$2/12))-$E$9,C2+(C2*($F$2/12))-$E$7)
使用する場合は
=BLANKIF(C2,IF(A3>=$E$11,C2+(C2*($F$2/12))-$E$9,C2+(C2*($F$2/12))-$E$7))
if = "omg" の場合にセルを空白にしたい場合はC2
、3 番目のオプション引数を追加します。
=BLANKIF(C2,IF(A3>=$E$11,C2+(C2*($F$2/12))-$E$9,C2+(C2*($F$2/12))-$E$7),"omg")
答え3
Conditional Formatting
目的を達成するために 使用できます。
式から余分なものをすべて取り除き、基本式だけを残す
Format only cells that contain
ブランク基準に条件を適用する
空白条件が真の場合、カスタム数値形式を適用します。;;;
Excel 2007 以降の代替
IFERROR(value, value_if_error)
Excel ヘルプより:
数式がエラーと評価された場合は指定した値を返します。それ以外の場合は、数式の結果を返します。数式内のエラーをトラップして処理するには、IFERROR 関数を使用します。